在MariaDB中添加外键

时间:2018-07-06 21:23:55

标签: mysql sql foreign-keys mariadb

我是

我有两个这样的表:

“ _ config”表:

enter image description here


“ _ usuarios”表:

enter image description here 当我尝试添加外键时:

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'   º   所有表都是空的

1 个答案:

答案 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