当我要执行此代码时,我收到此错误消息:
您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 靠近'ADD CONSTRAINT
fk_pay_grade_scale
FOREIGN KEYpay_scale_id
参考文献第11行的“pay_s”
但我不明白这个问题。感谢您的帮助!
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;
答案 0 :(得分:4)
您无法在 ADD CONSTRAINT
声明中使用 CREATE TABLE
。
在创建表格后或在 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 `pay_grades`
ADD CONSTRAINT `pay_scale_id` FOREIGN KEY REFERENCES `pay_scales`(`id`)
ON UPDATE CASCADE ON DELETE RESTRICT;
MySQL documentation用于外键声明。
答案 1 :(得分: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;