2017-04-11 113 views
0
CREATE TABLE DEPARTMENT (Dname VARCHAR(15) NOT NULL, 
Dnumber INT NOT NULL, 
Mgr_ssn CHAR(9) NOT NULL, 
Mgr_start_Date DATE, 
PRIMARY KEY(Dnumber), 
UNIQUE(Dname), 
FOREIGN KEY(Mgr_ssn) REFERENCES EMPLOYEE (Ssn) 
ON DELETE SET DEFAULT ON UPDATE CASCADE); 

我是MySQL的初學者。上面的命令使我這個:MySQL外鍵語法錯誤

無法添加外鍵約束

我已經試過SHOW ENGINE INNODB STATUS; 我查EMPLOYEE.Ssn的數據類型。 請幫忙。

編輯:我EMPLOYEE表

| employee | CREATE TABLE `employee` (
    `Fname` varchar(10) DEFAULT NULL, 
    `Minit` char(1) DEFAULT NULL, 
    `Lname` varchar(10) DEFAULT NULL, 
    `Ssn` char(9) NOT NULL, 
    `Bdate` date DEFAULT NULL, 
    `Address` varchar(40) DEFAULT NULL, 
    `Sex` char(1) DEFAULT NULL, 
    `Salary` int(11) DEFAULT NULL, 
    `Super_ssn` char(9) DEFAULT NULL, 
    `Dno` int(11) DEFAULT NULL, 
    PRIMARY KEY (`Ssn`), 
    KEY `Super_ssn` (`Super_ssn`), 
    CONSTRAINT `employee_ibfk_1` FOREIGN KEY (`Super_ssn`) REFERENCES `EMPLOYEE` (`Ssn`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 | 
+0

你肯定FOREIGHN關鍵是拼寫一個h?或者是你粘貼時發生錯字 –

+0

謝謝。我修正了它,但現在它給了我「不能添加外鍵約束」 –

+0

「默認情況下,表別名在Unix上區分大小寫,但在Windows或OS X上不是這樣。......最好採用一致的約定,例如** always **使用小寫名稱**創建和引用數據庫和表**。爲了最大的便攜性和易用性,建議使用此約定。「 https://dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivity.html – spencer7593

回答

1

據當時https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html,則不能使用SET DEFAULT與INNODB MySQL的文檔:

SET DEFAULT: This action is recognized by the MySQL parser, but both InnoDB and NDB reject table definitions containing ON DELETE SET DEFAULT or ON UPDATE SET DEFAULT clauses

+0

只有'ON DELETE CASCADE'起作用。 'ON DELETE SET NULL'或'ON DELETE SET DEFAULT'不起作用。有趣。 –

+0

我猜RESTRICT也可以工作,所以基本上看起來你不能在主記錄被刪除時更新子記錄。 – racraman

+0

@MintK:澄清你的評論:只要外鍵列允許空值(即,如果該列不*用* NOT NULL約束來聲明),InnoDB就允許'ON DELETE SET NULL'。 – spencer7593