-
Mysql. Есть некий запрос (INSERT, UPDATE или DELETE). Как можно, не выполняя его, проверить будут ли нарушены какие либо ограничения? Например, дублирование в уникальных индексах или ограничения связанные с внешними ключами (CONSTRAINT ... FOREIGN KEY (...) REFERENCES ... (...) ON DELETE RESTRICT ON UPDATE RESTRICT);
-
проверить можно, если повторишь у себя всю логику проверок констрейнтов сервера.
только тебе это ни разу не поможет.
-
А какой смысл предварительно проверять то, что и так будет проверено при выполнении?
-
Как можно, не выполняя его, проверить будут ли
Ты сидишь в школе, а в магазине в это время осталась последняя бутылка пива. Как, не приходя в магазин, проверить, что когда ты придешь в магазин, то бутылка еще не будет продана и достанется тебе?
-
> Ты сидишь в школе, а в магазине в это время осталась последняя > бутылка пива. > Как, не приходя в магазин, проверить, что когда ты придешь > в магазин, то бутылка еще не будет продана и достанется > тебе?
В школе? Пиво? Второгодник?
-
> Как можно, не выполняя его, проверить будут ли нарушены > какие либо ограничения?
Никак. Один Аллах ведает, какие именно чеки стоят на столбцах и что происходит при вызове триггеров. Хотя нет, можно всю эту лабуду на клиент затянуть (если прав хватит), распарсить триггеры, констрейнты, выстроить бизнес-логику, потом по данным своей команды проверить валидность (типа, если вторичный ключ, то сделать выборку, есть ли такой первичный, и т.д.), после чего выполнить свою команду. Что, кстати, ни капельки не гарантирует того, что какой-нибудь хороший человек в это время в другой транзакции всё не нарушил, успев закоммитить данный.
-
В школе? Пиво? Второгодник?
Испорченный какой. Имелся ввиду отец, сидящий в школе на родительском собрании.
-
> Имелся ввиду отец, сидящий в школе на родительском собрании.
Не хожу на родительские собрания. Вообще не представляю, как это.
-
А как вариант: Начать транзакцию, выполнить и откатить ее?
-
Какая задача решается-то?
-
> А как вариант: > Начать транзакцию, выполнить и откатить ее? авто инкремент вне зависимости от транзакций растет. т.е. абсолютно все, так назад не откатишь.
хотя разные ДБ Ехплореры как то делают. синтаксис запросов проверяют.
-
-
Какая задача решается-то?
штобынебыло эксепшенов которыеящщитаю ошипками.
-
> дублирование в уникальных индексах или ограничения связанные с внешними ключами а, понял, не внимательно прочитал. никак наверное.
-
> Какая задача решается-то?
Задача теоретическая. Проверка по факту пока устраивает.
Изучаю (внедрением в новый проект) внешние ключи и возник такой вопрос.
-
А как вариант: Начать транзакцию, выполнить и откатить ее?
Чтобы в смысле если прокатило вставить и откатить, то значит все зашибись и значит следом можно сделать то же самое, но уже без отката?
И в смысле если не вставитсо в первый раз, то второй можно уже не пробовать?
Чорт, да ты чертовски умен и хитер, чорт.
Задача теоретическая. Ты учоный наверное.
-
> Задача теоретическая
Это вредная задача и за попытки ее решения надо вырывать руки. По самую голову.
|