gpt4 book ai didi

mysql - 创建表失败,外键约束形成不正确

转载 作者:可可西里 更新时间:2023-11-01 06:39:57 25 4
gpt4 key购买 nike

话题

MariaDB InnoDB 外键问题

首先要说我是 InnoDB 的新手并且昨天花了一整天的时间阅读帖子我一路上尝试了多种方法来让我到达现在的位置所以我被冲洗掉了还是有办法解决这个问题黑暗森林。

我有一个表,它是我数据模型中许多表的中心。所以沿着这些思路:

create table users (id int not null auto_increment
, username varchar(255) NOT NULL
, password varchar(255) NOT NULL
, active int NOT NULL
, PRIMARY KEY (id))
ENGINE=InnoDB COLLATE=utf8_unicode_ci;

决定在这个周末快速清理我的 FK 上的一些 DELETE/UPDATE 子句......著名的遗言......

这里有一个相关的表格例子

create table athing (id int not null auto_increment
, name varchar(255) not null
, status varchar(255) not null
, created_by_user_id int
, PRIMARY KEY (id)
, CONSTRAINT athing_fk1 FOREIGN KEY (created_by_user_id) REFERENCES users (id)
) ENGINE=InnoDB COLLATE=utf8_unicode_ci;

问题

修改了“ATHING”表中的 FK 以包含 ON DELETE SET NULL。保存该修改一切似乎没问题。我正在使用 HeidiSQL 来执行此操作。

长话短说,我正在浏览我的表列表,发现我的 USERS 表不见了!通过大量的阅读和努力,我能够将事情清理干净,但为了真正确保一切顺利,我放弃了所有指向 USERS 表的 FK,并删除了该表。

现在,当我尝试重新创建 USERS 表时,我收到此错误:

ERROR 1005 (HY000): Can't create table `sprintdb`.`system_users` (errno: 150 "Foreign key constraint is incorrectly formed")

我注意到在我第一次尝试这样做时,虽然我认为我已经放弃了所有 FK,但仍然存在一些键的残余,特别是在某些表上支持这些键的索引。在查询 INNODB_SYS_TABLES 和 INNODB_SYS_INDEXES 表时,我认为被删除的那些索引仍然存在于这些系统表中。

有没有办法超越这个我觉得在某个地方存在一些信息,无论是在文件系统中还是在数据库本身中,需要刷新或删除,以便我可以继续前进...想法?

最佳答案

我在使用 3rd 方工具创建表然后约束现有表时多次收到此消息。它是以下两种情况之一:

  • int 列有不同的大小
  • int 列有不同的标志(无 AUTO_INCREMENT)

例如,我使用某种工具创建了一个表,该工具以某种方式将列创建为 INT(10) 而不是预期的 INT(11)。尽管在创建两者时我只是选择了 INT,但它还是搞砸了 - 从来没有找到原因。

长话短说,通常最好在创建表时明确说明 INT 大小。

在您的情况下,以下应该有效:

create table users (id int(11) not null auto_increment
, username varchar(255) NOT NULL
, password varchar(255) NOT NULL
, active int NOT NULL
, PRIMARY KEY (id))
ENGINE=InnoDB COLLATE=utf8_unicode_ci;

create table athing (id int(11) not null auto_increment
, name varchar(255) not null
, status varchar(255) not null
, created_by_user_id int(11) not null
, PRIMARY KEY (id)
, CONSTRAINT athing_fk1 FOREIGN KEY (created_by_user_id) REFERENCES users (id)
) ENGINE=InnoDB COLLATE=utf8_unicode_ci;

关于mysql - 创建表失败,外键约束形成不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24106756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com