如何将外键值设置为“NULL”?

时间:2014-01-06 11:18:27

标签: mysql null foreign-keys

如果删除table1中的主键,如何将table2中的外键值设置为NULL? 我创建了2个表Itemorder_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}}表。

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只是忽略它们。