2014-01-06 123 views
0

當table1中的主鍵被刪除時,如何將table2中的外鍵值設置爲NULL? 我已經創建了2個表Itemorder_item如何將外鍵值設置爲'NULL'?

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); 

然後,我已插入5個值在Item表。 現在,如果我刪除項目表中的item_no = 4,它在Item表中被刪除,但item_no的值在order_item表中未被設置爲NULL

回答

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
內聯引用子句不起作用。

這個陌生behavoiur的原因在文檔描述,請檢查此鏈接:
http://dev.mysql.com/doc/refman/5.7/en/create-table.html

MySQL不支持或識別「內聯參考規範」(如SQL標準中定義)引用被定義爲列規範的一部分。只有在指定爲單獨的FOREIGN KEY規範的一部分時,MySQL才接受REFERENCES子句。


內聯(內聯=旁邊列定義)參考specyfications被MySQL解析,然而MySQL簡單地忽略它們。

+0

你爲什麼用另一張桌子? – user2713461

+0

我在演示中使用了兩個表'order_item'和'order_item1'來顯示,僅使用一個測試用例,它們有何不同(運行'delete'後會有什麼結果)。如果我使用相同的表名,它需要兩個測試用例。 – krokodilko