当前位置: 首页 > 知识库问答 >
问题:

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

辛承志
2023-03-14

我目前正在努力理解为什么第一个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个答案

费辰阳
2023-03-14
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
 类似资料:
  • 我在创建mysql数据库中现有表的外键时遇到了一些问题。 我不想创建一个名为的新表来引用它,使用以下方法: 但我发现了错误: 为了获得更多的信息,我做了: 在我看来,这两个列的类型似乎是匹配的,因为它们都是varchar(45)。(我还尝试将列设置为not null,但这没有解决问题)所以我猜问题一定是。但我不太清楚这意味着什么,也不知道如何检查/修复它。有人有什么建议吗?是什么意思?

  • 方法正在工作,我已经创建了其他简单的表没有问题。 我用的是MySQL服务器8.0 这是对表的测试,然后我将创建一个脚本来创建它们。我一直有这个错误: 无法创建表,SQLException:无法添加外键约束 但我不知道怎么了。 plhd--11/>ConnectionImpl.execSQL(ConnectionImpl.java:2570)[23:51:36 WARN]:在com.mysql.jd

  • 我试图在两个表之间创建一个外键约束,但在执行alter命令之后,mysql创建了索引而不是外键。 我使用的是hibernate,所以最初我认为这是hibernate的问题,但当我直接在mysql上执行查询时,行为是一样的。 更改表person添加约束FK9ircw28d19mdg5pu8yfg1qs8p外键(Address_Id)引用地址(Address_Id) 运行此命令后,我会在mysql数据

  • 表a已成功创建... 错误1215(HY000):无法添加外键约束 无法创建表b

  • 本文向大家介绍MySQL中外键的创建、约束以及删除,包括了MySQL中外键的创建、约束以及删除的使用技巧和注意事项,需要的朋友参考一下 前言 在MySQL 3.23.44版本后,InnoDB引擎类型的表支持了外键约束。 外键的使用条件: 1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持); 2.外键列必须建立了索引,MySQL 4.1.2以后

  • 当我要执行这段代码时,我会收到以下错误消息: 您的SQL语法有错误;请查看与您的MySQL server版本相对应的手册,以了解使用“add CONSTRAINTFOREIGN KEY在第11行引用`pay_s'时使用的正确语法 但我不明白问题所在。感谢您的帮助!