首页 > 解决方案 > 错误 1022:无法写入;表 '#sql-209c_8' SQL 语句中的重复键:

问题描述

为什么我不能添加两个外键?

执行:

ALTER TABLE `adv`.`book` 
ADD CONSTRAINT `BRANCH_ID`
  FOREIGN KEY (`BRANCH_ID`)
  REFERENCES `adv`.`branch` (`BRANCH_ID`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION;

Operation failed: There was an error while applying the SQL script to the database.
ERROR 1022: Can't write; duplicate key in table '#sql-209c_8'
SQL Statement:
ALTER TABLE `adv`.`book` 
ADD CONSTRAINT `BRANCH_ID`
  FOREIGN KEY (`BRANCH_ID`)
  REFERENCES `adv`.`branch` (`BRANCH_ID`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION

标签: sql

解决方案


您似乎正在使用 MySQL。

从错误消息来看,很可能已经存在另一个具有相同名称的约束(即BRANCH_ID)。这是不允许的。

要解决此问题,您可以简单地为您尝试创建的约束指定一个不同的名称。

您可以查询目录视图INFORMATION_SCHEMA.KEY_COLUMN_USAGE以找出哪些表使用相同的约束名称。

SELECT table_schema, table_name, column_name
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE constraint_name = 'BRANCH_ID';

推荐阅读