问题描述
我目前正在努力理解为什么第一个 MysqL 代码对位置外键不起作用。同时,当我将反引号添加到 Position 时,它允许创建表格。
我搜索过 Position 是否是 MysqL 的保留字,但找不到任何提及它是保留字的内容。
所以我想知道是否有人知道它为什么不起作用。
CREATE TABLE Employee (
IDEmployee INT AUTO_INCREMENT UNIQUE NOT NULL,IDPosition INT NOT NULL,IDPerson INT NOT NULL,EmployeeNumber VARCHAR(25) NOT NULL,Username VARCHAR(25) NOT NULL,Password VARCHAR(256) NOT NULL,PRIMARY KEY (IDEmployee),FOREIGN KEY (IDPosition) REFERENCES Position(IDPosition),FOREIGN KEY (IDPerson) REFERENCES Person(IDPerson)
);
CREATE TABLE Employee (
IDEmployee INT AUTO_INCREMENT UNIQUE NOT NULL,FOREIGN KEY (IDPosition) REFERENCES `Position`(IDPosition),FOREIGN KEY (IDPerson) REFERENCES Person(IDPerson)
);
解决方法
mysql> CREATE TABLE Employee (
-> IDEmployee INT AUTO_INCREMENT UNIQUE NOT NULL,-> IDPosition INT NOT NULL,-> IDPerson INT NOT NULL,-> EmployeeNumber VARCHAR(25) NOT NULL,-> Username VARCHAR(25) NOT NULL,-> Password VARCHAR(256) NOT NULL,-> PRIMARY KEY (IDEmployee),-> FOREIGN KEY (IDPosition) REFERENCES Position(IDPosition),-> FOREIGN KEY (IDPerson) REFERENCES Person(IDPerson)
-> );
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 'Position(IDPosition),FOREIGN KEY (IDPerson) REFERENCES Person(IDPerson)
)' at line 9
这个错误是因为 POSITION() 是一个函数。
mysql> help position;
Name: 'POSITION'
Description:
Syntax:
POSITION(substr IN str)
POSITION(substr IN str) is a synonym for LOCATE(substr,str).
URL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html