2
這是SQL:ERROR 1005(HY000):無法創建表 '...... issue.frm'(錯誤:150)
CREATE TABLE user (
userID INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
username VARCHAR(100) NOT NULL,
isAdmin BOOL NOT NULL DEFAULT 0,
canAssignIssue BOOL NOT NULL DEFAULT 0,
canMarkDuplicate BOOL NOT NULL DEFAULT 0,
canProcessIssue BOOL NOT NULL DEFAULT 0
) ENGINE = InnoDB;
CREATE TABLE issue (
issueID INTEGER UNSIGNED AUTO_INCREMENT NOT NULL,
title VARCHAR(100) NOT NULL,
body TEXT NOT NULL,
duplicateOf INTEGER UNSIGNED DEFAULT NULL,
issueDateTime DATETIME NOT NULL,
postBy INTEGER UNSIGNED NOT NULL,
PRIMARY KEY (issueID, postBy, duplicateOf),
INDEX (postBy, duplicateOf),
FOREIGN KEY (duplicateOf) REFERENCES issue (issueID)
ON DELETE SET NULL,
FOREIGN KEY (postBy) REFERENCES user (userID)
ON DELETE SET NULL
) ENGINE = InnoDB;
我從得到這個錯誤消息上面的代碼:
ERROR 1005 (HY000): Can't create table '......\issue.frm' (errno: 150)
然而,如果我改變
FOREIGN KEY (duplicateOf) REFERENCES issue (issueID)
ON DELETE SET NULL,
到
該代碼有效。
可能是這個issueID不能爲NULL。每個'issID INTEGER UNSIGNED AUTO_INCREMENT NOT NULL,'。外鍵應該設置在相同的字段上。 – stslavik
不,如果父記錄被刪除,外鍵可以設置爲空。這不是問題。問題在於OP試圖設置null作爲主鍵的一部分,根據定義它不能爲空。 –