2016-07-26 79 views
0

当我要执行这个代码,我收到此错误信息:MySQL的外键约束语法

您的SQL语法错误;检查 对应于你的MySQL服务器版本正确的语法使用 附近手册“添加约束fk_pay_grade_scale FOREIGN KEY pay_scale_id 参考`pay_s”在第11

但我不明白的问题。感谢您的帮助!

 
CREATE TABLE IF NOT EXISTS `pay_grades` (
    `pay_grade_id` int(20) NOT NULL, 
    `pay_scale_id` tinyint(4) NOT NULL, 
    `name` varchar(100) NOT NULL, 
    `basic_salary` decimal(10,2) NOT NULL, 
    `status` int(2) NOT NULL DEFAULT '1', 
    PRIMARY KEY (`pay_grade_id`), 
    INDEX (`pay_scale_id`, `pay_grade_id`), 
    ADD CONSTRAINT `fk_pay_grade_scale` FOREIGN KEY `pay_scale_id` REFERENCES `pay_scales`(`id`) ON UPDATE CASCADE ON DELETE RESTRICT 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 


CREATE TABLE IF NOT EXISTS `pay_scales` (
`id` tinyint(4) NOT NULL, 
    `name` varchar(100) NOT NULL, 
    PRIMARY KEY(id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

回答

3

CREATE TABLE声明不能使用ADD CONSTRAINT。 在创建表格后或在CREATE TABLE中声明约束。


解决方案一:加约束的CREATE TABLE

CREATE TABLE IF NOT EXISTS `pay_grades` (
    `pay_grade_id` int(20) NOT NULL, 
    `pay_scale_id` tinyint(4) NOT NULL, 
    `name` varchar(100) NOT NULL, 
    `basic_salary` decimal(10,2) NOT NULL, 
    `status` int(2) NOT NULL DEFAULT '1', 
    PRIMARY KEY (`pay_grade_id`), 
    INDEX (`pay_scale_id`, `pay_grade_id`), 
    FOREIGN KEY (`pay_scale_id`) REFERENCES `pay_scales`(`id`) ON UPDATE CASCADE ON DELETE RESTRICT 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

解决方法二:ALTER TABLE添加约束

创建你的表没有约束,然后添加您的约束如下:

ALTER TABLE `pay_grades` 
ADD CONSTRAINT `pay_scale_id` FOREIGN KEY REFERENCES `pay_scales`(`id`) 
ON UPDATE CASCADE ON DELETE RESTRICT; 

MySQL documentation用于外键声明。

+0

是的,我接受:) –

+1

@zamansarker接受一个答案表示单击旁边的答案小刻度线。如果其他答案是有用的,你也应该考虑提高它们。更多详情,请访问http://stackoverflow.com/help/someone-answers – e4c5

0

这似乎是表创建顺序的差异。首先创建主键表,而不是创建外键表。

CREATE TABLE IF NOT EXISTS `pay_scales` (
`id` tinyint(4) NOT NULL, 
    `name` varchar(100) NOT NULL, 
    PRIMARY KEY(id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 


CREATE TABLE IF NOT EXISTS `pay_grades` (
    `pay_grade_id` int(20) NOT NULL, 
    `pay_scale_id` tinyint(4) NOT NULL, 
    `name` varchar(100) NOT NULL, 
    `basic_salary` decimal(10,2) NOT NULL, 
    `status` int(2) NOT NULL DEFAULT '1', 
    PRIMARY KEY (`pay_grade_id`), 
    INDEX (`pay_scale_id`, `pay_grade_id`), 
    ADD CONSTRAINT `fk_pay_grade_scale` FOREIGN KEY `pay_scale_id` REFERENCES `pay_scales`(`id`) ON UPDATE CASCADE ON DELETE RESTRICT 
) ENGINE=InnoDB DEFAULT CHARSET=utf8;