【问题标题】:Adding Foreign Keys in MariaDB在 MariaDB 中添加外键
【发布时间】:2018-07-06 21:23:54
【问题描述】:

各位,

我有两张这样的表:

“_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): 无法创建表 'databasename'.'#sql-14a4_3' (errno: 121 "写入或更新时重复键)

我尝试将 FOREIGN_KEY_CHECKS 设置为 0 但返回:

SQL 错误 (1825) 无法在表上添加外键约束 '_config'。 FOREIGN KEY 约束中的选项不正确 '数据库名称/_config__entitycreateuser_fk' º 所有表都是空的

【问题讨论】:

    标签: mysql sql foreign-keys mariadb


    【解决方案1】:

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

    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 约束有限制。您应该能够阅读手册中的详细信息。

    更有用的一点是,在尝试再次添加 FK 约束后尝试运行此 SHOW ENGINE innodb STATUS。它将向您显示错误的详细信息。

    我现在的猜测是您的问题是...ON UPDATE SET NULL。因为您将尝试在_usuarios.UsuarioId 列上使用SET NULL,这似乎是您桌子上的IDENTITY。作为IDENTITY 自动将列设置为NOT NULLABLE

    【讨论】:

    • 未找到。 0 个结果
    • 我在我的回答中发布了一个开放搜索版本。只要确保它也不在该列表中。您是否有机会使用链接数据库?
    • 它们是 innodb 表,查询不提取结果
    猜你喜欢
    • 2020-08-27
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 2016-04-04
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    相关资源
    最近更新 更多