【问题标题】:I am not able to drop a FOREIGN KEY in MYSQL, problem with the syntax我无法在 MYSQL 中删除 FOREIGN KEY,语法有问题
【发布时间】:2021-04-01 17:42:17
【问题描述】:
CREATE TABLE employee (
emp_id SMALLINT PRIMARY KEY,
first_name VARCHAR(10),
last_name VARCHAR(10),
birthdate DATE,
sex VARCHAR(1),
salary SMALLINT,
super_id SMALLINT,
branch_id SMALLINT
);

ALTER TABLE employee
ADD FOREIGN KEY (super_id) REFERENCES employee(emp_id);

ALTER TABLE employee
ADD FOREIGN KEY (branch_id) REFERENCES branch(branch_id);

ALTER TABLE employee
DROP FOREIGN KEY (super_id);

添加后我无法删除外键。正在努力学习SQL,谢谢解答。

ERROR - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的“(super_id)”附近使用正确的语法

【问题讨论】:

  • 注意,代码是 3 个反引号 ```,而不是 3 个撇号 '''
  • 为什么不能删除外键?你有错误吗?始终剪切并粘贴您在问题中遇到的确切错误消息。
  • 我已更新问题正文中显示的错误。请检查。
  • Fk 是按其名称(在 MySQL 术语中为 fk_symbol)而不是按其表达式删除的。您必须在创建时指定 FK 名称,或者在删除前查看 SHOW CREATE TABLE 中的名称。

标签: mysql foreign-keys


【解决方案1】:

给你的约束命名:

ALTER TABLE employee
ADD CONSTRAINT fk_employee_superid__employee_employeeid 
FOREIGN KEY (super_id) REFERENCES employee(emp_id);

按名称删除:

ALTER TABLE employee
DROP CONSTRAINT fk_employee_superid__employee_employeeid;

【讨论】:

  • "fk_employee_superid__employee_employeeid" 这是我们给外键起的名字?
  • 不太清楚这意味着什么,tbh
  • @AyushSingh,上面显示的示例不是您为外键指定的名称。如果您为外键约束指定了名称,这只是一个示例。如果您不指定名称,MySQL 会生成一个名称。运行查询 SHOW CREATE TABLE employee\G 以查看约束的自动名称在您的表上是什么。
  • 所以,我回答的第一部分,当我说“给你的约束一个名字”,然后在你给出的代码中添加代码 CONSTRAINT fk_employee_superid__employee_employeeid 的词时。那是我给出的约束一个名称,然后我用它稍后再次删除约束。
猜你喜欢
  • 2016-11-29
  • 2014-01-02
  • 1970-01-01
  • 1970-01-01
  • 2016-07-24
  • 2014-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多