«НЕТ ДЕЙСТВИЙ» - это то же самое, что и «ОГРАНИЧЕНИЕ», что может вызвать проблемы, если я не смогу удалить дочерние записи.
Это не то, что означает это условие. Он не мешает вам удалять дочерние записи, он предотвращает удаление родительских записей тогда и только тогда, когда существуют дочерние записи, которые зависят от родительской записи.
Пример:
Таблица Orders
имеет отношение один-ко-многим с LineItems
, а внешний ключ в LineItems
имеет параметр restrict.
CREATE TABLE Orders (
order_id INT NOT NULL,
PRIMARY KEY (order_id)
);
CREATE TABLE LineItems (
lineitem_id INT NOT NULL,
order_id INT NOT NULL,
PRIMARY KEY (lineitem_id),
FOREIGN KEY (order_id) REFERENCES Orders (order_id) ON DELETE RESTRICT
);
Создать тестовые данные:
mysql> INSERT INTO Orders SET order_id = 123;
Query OK, 1 row affected (0.02 sec)
mysql> INSERT INTO LineItems SET lineitem_id = 1, order_id = 123;
Query OK, 1 row affected (0.02 sec)
Мы не можем удалить запись Orders, потому что в зависимости от нее есть LineItem:
mysql> DELETE FROM Orders WHERE order_id = 123;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`test`.`lineitems`, CONSTRAINT `lineitems_ibfk_1` FOREIGN KEY (`order_id`) REFERENCES `Orders` (`order_id`))
Но мы можем удалить запись LineItems в любое время:
mysql> DELETE FROM LineItems WHERE order_id = 123;
Query OK, 1 row affected (0.01 sec)
Теперь, когда нет записей LineItems, ссылающихся на запись Orders, мы также можем удалить эту запись:
mysql> DELETE FROM Orders WHERE order_id = 123;
Query OK, 1 row affected (0.01 sec)