我是
我有两个这样的表:
“ _ config”表:
“ _ usuarios”表:
ALTER TABLE `_config` ADD CONSTRAINT `_config__entitycreateuser_fk`
FOREIGN KEY (`_EntityCreateUser`)
REFERENCES `_usuarios`(`UsuarioId`)
ON DELETE CASCADE ON UPDATE SET NULL
我收到此错误:
SQL错误(1005):无法创建表'数据库名'。'#sql-14a4_3' (错误号:121“在写入或更新时存在重复密钥)
我尝试将FOREIGN_KEY_CHECKS设置为0,但返回:
SQL错误(1825)无法在表上添加外键约束 '_config'。 FOREIGN KEY约束中的选项不正确 '数据库名称/ _config__entitycreateuser_fk' º 所有表都是空的
答案 0 :(得分:2)
检查外键的名称对于数据库而言是唯一的
SELECT
constraint_name,
table_name
FROM
information_schema.table_constraints
WHERE
constraint_type = 'FOREIGN KEY'
AND table_schema = DATABASE()
AND constraint_name = '_config__entitycreateuser_fk'
这是最常见的修复程序之一。
打开搜索版本。
SELECT
constraint_name,
table_name
FROM
information_schema.table_constraints
WHERE
constraint_type = 'FOREIGN KEY'
AND table_schema = DATABASE()
ORDER BY constraint_name ASC
针对您的评论,我正在再次编辑我的答案。
再次检查所讨论的表_config
和_usuarios
是否未分区。 InnoDB对分区表的FK
约束有限制。您应该能够阅读手册中的详细信息。
更有用的一点是,尝试再次添加SHOW ENGINE innodb STATUS
约束后,尝试运行此FK
。它将向您显示错误的详细信息。
我现在的猜测是您的问题是...ON UPDATE SET NULL
。因为您将尝试在表上似乎是SET NULL
的{{1}}列上访问_usuarios.UsuarioId
。成为IDENTITY
会自动将该列设置为IDENTITY