UPDATE product
> SET product_type_cd = 'XYZ'
> WHERE product_type_cd = 'LOAN';
ERROR 1216 (23000): Cannot add or update a child row: a foreign key constraint
fails
Изза ограничения внешнего ключа на столбец
product.product_type_cd
сервер не разрешает провести такое обновление, поскольку в таблице
product_type
в столбце
product_type_cd
нет строки со значением
'XYZ'
. Та
ким образом, ограничение внешнего ключа не позволяет изменить до
чернюю строку, если в родительской нет соответствующего значения.
Однако что произошло бы, попробуй мы изменить значение
родитель
ской
строки таблицы
product_type
на
'XYZ'
? Вот выражение
update
, реа
лизующее попытку изменить тип счета
LOAN
на
XYZ
:
mysql>
UPDATE product_type
> SET product_type_cd = 'XYZ'
> WHERE product_type_cd = 'LOAN';
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign
key constraint
fails
Опять формируется ошибка. На этот раз потому, что в таблице
product
есть дочерние строки, столбец
product_type_cd
которых содержит зна
чение
'LOAN'
. Это поведение ограничений внешнего ключа по умолча
нию, но оно не единственное возможное. Можно указать серверу рас
пространять это изменение на все дочерние строки, сохраняя, таким
образом, целостность данных. Эта разновидность ограничения внеш
него ключа, известная как
каскадное обновление
(
cascading update
),
может быть установлена путем удаления существующего внешнего
ключа и добавления нового, включающего блок
on
update
cascade
:
mysql>
ALTER TABLE product
> DROP FOREIGN KEY fk_product_type_cd;
Query OK, 8 rows affected (0.02 sec)
Ограничения
Достарыңызбен бөлісу: |