gpt4 book ai didi

mysql - 无法向表添加两个外键

转载 作者:搜寻专家 更新时间:2023-10-30 23:48:10 25 4
gpt4 key购买 nike

我有两个表如下:第一张表:

CREATE TABLE User ( 
User_ID VARCHAR(8)NOT NULL PRIMARY KEY,
User_Name VARCHAR (25) NOT NULL,
User_Gender CHAR (1) NOT NULL,
User_Position VARCHAR (10) NOT NULL,
);

第二张表:

CREATE TABLE Training (
Training_Code VARCHAR(8) NOT NULL Primary Key,
Training_Title VARCHAR(30) NOT NULL,
);

我正在尝试创建一个表,它有两个外键来连接前面的两个表:

CREATE TABLE Request (
User_ID VARCHAR(8) NOT NULL,
Training_Code VARCHAR(8) NOT NULL,
Request_Status INT(1) NOT NULL
);

当我尝试在新表中设置外键时,User_ID 可以成功完成,但是由于错误原因无法将 Training_Code 设置为外键:

ERROR 1215 (HY000): Cannot add foreign key constraint

当我搜索这个问题时,它的原因是数据类型不一样,或者名称不一样..但在我的情况下两者都是正确的所以你能告诉我这里有什么问题吗?

最佳答案

你也需要在表 Request 中为该列创建一个索引:

先发行

CREATE INDEX idx_training_code ON Request (Training_Code);

然后你应该成功创建外键约束

ALTER TABLE Request
ADD CONSTRAINT FOREIGN KEY idx_training_code (Training_Code)
REFERENCES Training(Training_Code);

它对我有用。但我不得不说它也可以在没有创建索引的情况下工作,如 Using FOREIGN KEY Constraints 的文档状态:

MySQL requires indexes on foreign keys and referenced keys so that foreign key checks can be fast and not require a table scan. In the referencing table, there must be an index where the foreign key columns are listed as the first columns in the same order. Such an index is created on the referencing table automatically if it does not exist. This index might be silently dropped later, if you create another index that can be used to enforce the foreign key constraint. index_name, if given, is used as described previously.

我强调的。我不知道你的情况是什么问题。

Demo

问题说明

如果表 Training 使用 MyISAM 存储引擎,则可以重现问题中提到的行为。然后创建引用表 Training 的外键将产生上述错误。

如果表中有数据,那么简单地删除表并不是最好的解决方案。您可以将存储引擎更改为 InnoDB

ALTER TABLE Training Engine=InnoDB;

现在可以成功添加外键约束了。

关于mysql - 无法向表添加两个外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25221417/

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