在创建数据库表建立外键是遇到了如下报错
1064 - 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 'position(position_id)
)' at line 8
数据库表sql如下:
--职位表
CREATE TABLE position (position_id INT AUTO_INCREMENT PRIMARY KEY,position_name VARCHAR(50) NOT NULL
);
---------------------------------------------------------------
--部门表
CREATE TABLE department (department_id INT AUTO_INCREMENT PRIMARY KEY,department_name VARCHAR(255) NOT NULL
);
----------------------------------------------------------------
--协会干部表
CREATE TABLE cadres (id INT AUTO_INCREMENT PRIMARY KEY,cadres_name VARCHAR(255) NOT NULL,department_id INT,position_id INT NOT NULL,cadres_session INT NOT NULL,FOREIGN KEY (department_id) REFERENCES department(department_id) ON DELETE SET NULL,FOREIGN KEY (position_id) REFERENCES position(position_id)
);
查阅资料说1064报错一般是因为单词打错了,但是我检查了好几遍都没问题。
最终1064语法错误还有可能是因为使用保留关键字
position
是 MySQL 的保留关键字,直接使用它作为表名或列名会导致语法错误。
这就是我出错的原因。了避免这个问题,你可以使用反引号()将
position` 表名括起来,这样 MySQL 就会将其视为普通的表名,而不是保留关键字。以下是修改后的 SQL 代码:
CREATE TABLE cadres (id INT AUTO_INCREMENT PRIMARY KEY,cadres_name VARCHAR(255) NOT NULL,department_id INT,position_id INT NOT NULL,cadres_session INT NOT NULL,FOREIGN KEY (department_id) REFERENCES department(department_id) ON DELETE SET NULL,FOREIGN KEY (position_id) REFERENCES `position`(position_id)
);