在mariadb中添加外键

ztmd8pv5  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(343)

我知道,伙计们,
我有两张这样的table:
“\配置”表:

“\u usarios”表:

当我尝试添加外键时:

ALTER TABLE `_config` ADD CONSTRAINT `_config__entitycreateuser_fk` 
  FOREIGN KEY (`_EntityCreateUser`) 
    REFERENCES `_usuarios`(`UsuarioId`) 
      ON DELETE CASCADE ON UPDATE SET NULL

我收到这个错误:
sql错误(1005):无法创建表'databasename'。#sql-14a4_'(errno:121“写入或更新时的重复键)
我尝试将外键检查设置为0,但返回:
sql错误(1825)未能在表“\u config”上添加外键约束。外键约束“databasename/\u config\u entitycreateuser\u fk”中的选项不正确º 所有表都是空的

ocebsuys

ocebsuys1#

检查外键的名称对于数据库是唯一的

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

针对你的评论,我再次编辑了我的答案。
仔细检查有问题的table, _config 以及 _usuarios 没有分区。innodb对 FK 分区表的约束。你应该能够阅读手册中的细节。
更有用的是,试着运行这个 SHOW ENGINE innodb STATUS 在尝试添加 FK 再次约束。它将向您显示错误的详细信息。
我猜你的问题是 ...ON UPDATE SET NULL . 既然你想 SET NULL_usuarios.UsuarioId 显示为 IDENTITY 在你的table上。成为一个 IDENTITY 自动将列设置为 NOT NULLABLE

相关问题