Конференция "Базы" » Проверить допустимость запроса MySQL [MySQL]
 
  • Дмитрий С © (28.04.15 23:08) [0]
    Mysql. Есть некий запрос (INSERT, UPDATE или DELETE). Как можно, не выполняя его, проверить будут ли нарушены какие либо ограничения?
    Например, дублирование в уникальных индексах или ограничения связанные с внешними ключами (CONSTRAINT ... FOREIGN KEY (...)
     REFERENCES ... (...) ON DELETE RESTRICT ON UPDATE RESTRICT);
  • кгшзх © (29.04.15 08:27) [1]
    проверить можно, если повторишь у себя всю логику проверок констрейнтов сервера.

    только тебе это ни разу не поможет.
  • Sergey13 © (29.04.15 08:57) [2]
    А какой смысл предварительно проверять то, что и так будет проверено при выполнении?
  • кгшзх © (29.04.15 09:08) [3]
    Как можно, не выполняя его, проверить будут ли

    Ты сидишь в школе, а в магазине в это время осталась последняя бутылка пива.
    Как, не приходя в магазин, проверить, что когда ты придешь в магазин, то бутылка еще не будет продана и достанется тебе?
  • Ega23 © (29.04.15 10:50) [4]

    > Ты сидишь в школе, а в магазине в это время осталась последняя
    > бутылка пива.
    > Как, не приходя в магазин, проверить, что когда ты придешь
    > в магазин, то бутылка еще не будет продана и достанется
    > тебе?


    В школе? Пиво? Второгодник?
  • Ega23 © (29.04.15 10:55) [5]

    > Как можно, не выполняя его, проверить будут ли нарушены
    > какие либо ограничения?


    Никак. Один Аллах ведает, какие именно чеки стоят на столбцах и что происходит при вызове триггеров.
    Хотя нет, можно всю эту лабуду на клиент затянуть (если прав хватит), распарсить триггеры, констрейнты, выстроить бизнес-логику, потом по данным своей команды проверить валидность (типа, если вторичный ключ, то сделать выборку, есть ли такой первичный, и т.д.), после чего выполнить свою команду.
    Что, кстати, ни капельки не гарантирует того, что какой-нибудь хороший человек в это время в другой транзакции всё не нарушил, успев закоммитить данный.
  • кгшзх © (29.04.15 11:23) [6]
    В школе? Пиво? Второгодник?


    Испорченный какой.
    Имелся ввиду отец, сидящий в школе на родительском собрании.
  • Ega23 © (29.04.15 11:55) [7]

    > Имелся ввиду отец, сидящий в школе на родительском собрании.


    Не хожу на родительские собрания. Вообще не представляю, как это.
  • Дмитрий С © (29.04.15 13:41) [8]
    А как вариант:
    Начать транзакцию, выполнить и откатить ее?
  • Ega23 © (29.04.15 15:27) [9]
    Какая задача решается-то?
  • sniknik © (29.04.15 15:45) [10]
    > А как вариант:
    > Начать транзакцию, выполнить и откатить ее?
    авто инкремент вне зависимости от транзакций растет. т.е. абсолютно все, так назад не откатишь.

    хотя разные ДБ Ехплореры как то делают. синтаксис запросов проверяют.
  • sniknik © (29.04.15 15:47) [11]
    О, даже онлайн есть
    http://ru.piliapp.com/mysql-syntax-check/
    можешь туда на проверку посылать ;).
  • кгшзх © (29.04.15 15:48) [12]
    Какая задача решается-то?

    штобынебыло эксепшенов которыеящщитаю ошипками.
  • sniknik © (29.04.15 15:49) [13]
    > дублирование в уникальных индексах или ограничения связанные с внешними ключами
    а, понял, не внимательно прочитал.
    никак наверное.
  • Дмитрий С © (29.04.15 16:40) [14]

    > Какая задача решается-то?

    Задача теоретическая. Проверка по факту пока устраивает.

    Изучаю (внедрением в новый проект) внешние ключи и возник такой вопрос.
  • кгшзх © (29.04.15 17:09) [15]
    А как вариант:
    Начать транзакцию, выполнить и откатить ее?


    Чтобы в смысле если прокатило вставить и откатить,
    то значит все зашибись
    и значит
    следом можно сделать то же самое, но уже без отката?

    И в смысле если не вставитсо в первый раз, то второй можно уже не пробовать?

    Чорт, да ты чертовски умен и хитер, чорт.

    Задача теоретическая.
    Ты учоный наверное.
  • Игорь Шевченко © (05.05.15 10:33) [16]

    > Задача теоретическая


    Это вредная задача и за попытки ее решения надо вырывать руки. По самую голову.
 
Конференция "Базы" » Проверить допустимость запроса MySQL [MySQL]
Есть новые Нет новых   [134427   +34][b:0][p:0]