Я пытаюсь выяснить, есть ли способ проверить ссылочную целостность отдельной строки после ее вставки в таблицу InnoDB, в то время как для foreign_key_checks
установлено значение 0.
Итак, учитывая дватаблицы:
CREATE TABLE `book` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`author_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `book_cc846901` (`author_id`),
CONSTRAINT `author_id_refs_id_7fdd0933` FOREIGN KEY (`author_id`) REFERENCES `person` (`id`)
) ENGINE=InnoDB;
CREATE TABLE `person` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
Мы запустили против них следующие операторы:
SET foreign_key_checks=0
INSERT INTO `book` (`id`, `name`, `author_id`) VALUES (1, 'Cryptonomicon', 3)
INSERT INTO `person` (`id`, `name`) VALUES (4, 'Neal Stephenson')
SET foreign_key_checks=1
Итак, мы поместили здесь несколько неверных данных - author_id ссылается на несуществующий person.id 3. Iя пытаюсь найти способ вызвать какую-либо проверку в этой строке, которая выдаст ошибку, если есть такая проблема с ссылками, как эта.
Подход, который я первоначально пытался применить, состоял в том, чтобы обновитьстрока с точно такими же данными.Я попробовал это:
UPDATE `book` SET `name` = 'Cryptonomicon', `author_id` = 3 WHERE `book`.`id` = 1
Я ожидал, что это вызовет ошибку - однако, это не так.Поскольку данные не изменились, по-видимому, проверка целостности не производится?Например, если для параметра author_id установлено значение 2 , то завершится неудачей.
Мой вопрос: существует ли альтернатива, которая позволила бы мне проверить заданную строку и вызвать ошибку целостности в случае возникновения проблемы?Я погуглил, но ничего не нашел.Я хотел бы не проверять всю таблицу, но это может быть единственным маршрутом.
Любые идеи или другие подходы, которые избегают меня, будут оценены.
(Если вам любопытно почему Я пытаюсь сделать все это, потому что я пытаюсь помочь решить открытый вопрос в инфраструктуре Django, где не могут быть загружены приборы с прямыми ссылками. Предлагаемое решение:отключить проверки внешнего ключа при загрузке приборов и повторно включить их после завершения загрузки.Я пытаюсь выяснить, как в этот момент вернуться и проверить ссылочную целостность строк, которые были добавлены в то время как проверки внешнего ключа былиВыключить и вызвать ошибку, если есть проблема.)