如果删除table1中的主键,如何将table2中的外键值设置为NULL
?
我创建了2个表Item
和order_item
。
Item(item_no(primary key),qty);
order_item(item_no(foreign key ),order_no);
我创建了表order_item
:
create table order_item(
item_no int references item on delete set NULL,
order_no int);
然后我在Item
表中插入了5个值。
现在,如果我删除了项目表中的item_no = 4
,则会在Item
表中将其删除,但item_no
的值未设置为NULL
order_item
1}}表。
答案 0 :(得分:1)
请使用以下语法使用显式CONSTRAINT [name] FOREIGN KEY ...
子句:
CREATE TABLE order_item1(
item_no int,
order_no int,
constraint foreign key (item_no) references item( item_no ) on delete set NULL
);
或明确地将foreigng键添加到现有表中:
ALTER TABLE order_item1
ADD constraint foreign key (item_no) references item( item_no ) on delete set NULL ;
请看一下这个简单的测试用例:http://www.sqlfiddle.com/#!2/3dddf/1
内联参考条款不起作用。
文档中描述了这种奇怪行为的原因,请查看此链接:
http://dev.mysql.com/doc/refman/5.7/en/create-table.html
MySQL无法识别或支持“内联REFERENCES规范”(在SQL标准中定义),其中引用被定义为列规范的一部分。 MySQL仅在指定为单独的FOREIGN KEY规范的一部分时才接受REFERENCES子句。
内联(内联=列定义旁边)引用规范由MySql解析,但MySql只是忽略它们。