2017-04-11 85 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