2013-07-18 102 views
0

对于我的生命,我找不到为什么MySQL不喜欢这个说法:MySQL的语法错误#1064 ON DELETE CASCADE

CREATE TABLE IF NOT EXISTS personnel 
(
    id INTEGER AUTO_INCREMENT PRIMARY KEY, 
    firstname VARCHAR(30) NOT NULL, 
    lastname VARCHAR(30) NOT NULL, 
    role VARCHAR(50) NOT NULL, 
    line_manager INTEGER NULL, 

    FOREIGN KEY (role) REFERENCES roles(name) 
     ON DELETE CASCADE 
     ON UPDATE CASCADE, 
    FOREIGN KEY (line_manager) REFERENCES personnel(id) 
     ON DELETE CASCADE 
     ON UPDATE CASCADE 
) ENGINE=InnoDB; 

从MySQL将在此之后,输出产生的是ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELETE CASCADE UPDATE CASCADE, FOREIGN KEY (line_manager) REFERENCES personnel(id) ' at line 10

任何人都可以建议我做错了什么?

+0

您粘贴错误是无关的DDL;在约束定义中的UPDATE CASCADE之前,在另一个引用“staff”表之前有一个缺少的'ON'关键字 –

+0

啊,对不起,我部分撒了谎。我将DDL从“员工”改为“人员”,以避免进一步混淆。错误已更新。 – CJxD

+0

够公平的;仍然,你得到的错误指向的事实是,MySQL期待'ON'关键字,但没有找到它 –

回答

2

嘿,我有检查你的MySQL查询和它的作品,我认为你应该检查以下限制

1) table roles must have same **engine** that is InnoDB 
2) the length of both column that is personnel(role) and roles(name) must be **equal** 
3) column roles(name) must be **primary key** 

只是检查这个事情,我认为这会工作

+0

是的,这个特殊的例子现在起作用了。我只是要弄清楚为什么其余的语法在语法几乎相同的情况下不起作用。我将删除这个问题,因为它不再相关 – CJxD