как выполнить взаимно-однозначную вставку в базу данных - PullRequest
2 голосов
/ 23 июля 2011

Я использую Mysql.И у меня есть две таблицы, которые взаимно связаны друг с другом.

Другими словами, они обе имеют ограничение внешнего ключа, ссылающегося на первичный ключ другой таблицы.

ЕслиЯ пытаюсь вставить одну запись для каждой таблицы, в которой каждая запись ссылается на другую.например:

База данных Mysql предотвратит такую ​​операцию из-за ограничения внешнего ключа «один к одному».

Это похоже на проблему куриного яйца.

ОднакоЯ заметил, что в Java Hibernate такая операция может быть выполнена, если два класса сущностей связаны один к одному.

Как это можно сделать в Hibernate, потому что я заметил, что две вставки (из Hibernateсообщения отладки) разделены, как я сделал.Так что в этом нет ничего особенного.

Или как заставить одну запись быть вставленной, даже если запись, на которую она ссылается, еще не существует?

Ответы [ 2 ]

3 голосов
/ 23 июля 2011

Укажите нулевое значение для одного из столбцов, на которые есть ссылки, столбцы ref допускают нулевые значения. Позже, когда вы вставите запись в указанный столбец, вы можете обновить столбец.

1 голос
/ 23 июля 2011

Вы можете попытаться отключить проверку внешнего ключа, выполнив SET foreign_key_checks = 0 непосредственно перед двумя запросами на вставку и сразу после ваших запросов, включив проверку внешнего ключа, выполнив SET foreign_key_checks = 1.

Подробнее о ограничения внешнего ключа .

mysql > SET foreign_key_checks = 0;
mysql > INSERT INTO t1 (t2_id) VALUES (1);
mysql > INSERT INTO t2 (t1_id) VALUES (1);
mysql > SET foreign_key_checks = 1;
...