提问者:小点点

在MySQL的表创建中不能创建外键约束,但其语法与其他外键相同


我目前正在努力理解为什么第一个MySQL代码不能用于position外键。同时,当我添加backtick来定位时,它允许创建表。

我搜索过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 ,
    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)
);

共1个答案

匿名用户

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