2
我搜索得很好,找不到解決問題的答案。這是我的問題的一個簡單例子。假設我有一個表test
,其中有兩個字段first
和second
。我做first
的主鍵,並要second
參考first
和級聯更新。這將允許我創建一個行列表,知道哪個行在任何給定行之後,除非是'head'。外鍵參考相同表
創建表格工作正常,但是當我嘗試添加一行時,它抱怨帶級聯更新的外鍵約束失敗。這是有道理的,因爲我離開second
爲空。因此,我以爲我可以插入兩行,然後添加外鍵:
first: a second: b
first: b second: a
這是成功的。然後我嘗試更新第1行,得到的值爲c
。但是,這不起作用,說明外鍵失敗。爲什麼?它不應該成爲以下嗎?
first: c second: b
first: b second: c
我唯一的預感是與更新循環更新的存在能排1個級聯行到第2,層疊回第1行,但是這不應該發生!沒有任何引用second
,所以更新應該只是級聯到第2行並停止。請幫忙,這讓我瘋狂。
編輯:根據要求,這裏是我的show create table test
。
CREATE TABLE `test` (
`first` varchar(32) NOT NULL,
`second` varchar(32) NOT NULL,
PRIMARY KEY (`first`),
KEY `fk` (`second`),
CONSTRAINT `fk` FOREIGN KEY (`second`) REFERENCES `test` (`first`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1
主鍵不是空的,因爲它將是第一行的c和第二行的b。而且,引用列也不會有空值。第一行是b,第二行是c。 –
它不會有空值,但?請你可以粘貼'show create table test'來查看結構。謝謝 –
當然,編輯我的問題與結果。 –