MySQL FOREIGN KEY 约束语法

标签 mysql foreign-keys create-table

当我要执行此代码时,我收到此错误消息:

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 'ADD CONSTRAINT fk_pay_grade_scale FOREIGN KEY pay_scale_id REFERENCES `pay_s' at line 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;

最佳答案

您不能在 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 `pay_grades` 
ADD CONSTRAINT `pay_scale_id` FOREIGN KEY REFERENCES `pay_scales`(`id`) 
ON UPDATE CASCADE ON DELETE RESTRICT;

MySQL documentation用于外键声明。

关于MySQL FOREIGN KEY 约束语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38583284/

相关文章:

mysql - MySQL双向关系和镜像外键的问题

MySQL DELETE 记录在 vb 中不起作用

c# - Entity Framework 4 使用外键在 WinForms 组合框中进行数据绑定(bind)

sql - 创建表时检查约束返回错误

HIVE - INSERT OVERWRITE vs DROP TABLE + CREATE TABLE + INSERT INTO

php - 存储类别和子类别(可能有无限子类别),以及将它们全部从 MYSQL 返回到 JSON 的函数

c++ - 如何在 Windows 中更改语言键盘布局 (c++)

mysql - 如何在没有外键的情况下建立两个表之间的关系

mysql - SQl - 我如何创建单个表的多个副本

mysql - 子选择或分组依据