gpt4 book ai didi

mysql - #1005 - mysql - 无法创建外键

转载 作者:行者123 更新时间:2023-11-29 06:12:21 25 4
gpt4 key购买 nike

我在这里创建了这个表:

CREATE TABLE izpulnitel(
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
ime VARCHAR(30) NOT NULL,
familia VARCHAR(30) NOT NULL,
img BLOB
);

还有这张 table :

CREATE TABLE album(
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
godina INT(6) NULL,
opisanie TEXT
);

我想用 2 个外键创建第三个表:

CREATE TABLE pesen (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
ime VARCHAR(30) NOT NULL,
tekst TEXT,
izpulnitel_id INT(6),
album_id INT(6),

INDEX par_ind (izpulnitel_id),
INDEX par_indx (album_id),

FOREIGN KEY (izpulnitel_id)
REFERENCES izpulnitel(id)
ON DELETE CASCADE,

FOREIGN KEY (album_id)
REFERENCES album(id)
ON DELETE CASCADE
)

但由于某种原因无法创建表。外键运算符周围存在某种错误,很可能是 INDEX 标记。

我尝试使用 CREATE INDEX ... 添加单独的查询,但它似乎不起作用。我应该在创建父表的同时创建这些索引还是有其他解决方案?无论如何,这些 INDEX-s 是做什么用的?

最佳答案

在创建外键时,使用的列具有相同的类型非常重要(阅读:必需)。

来自 MySQL 文档:

Corresponding columns in the foreign key and the referenced key must have similar data types. The size and sign of integer types must be the same. The length of string types need not be the same. For nonbinary (character) string columns, the character set and collation must be the same.

前两个表中的 id 列是 INT UNSIGNED,但第三个表中的 izpulnitel_id 和 album_id 是 INT(即已签名)。签名是必须匹配的事情之一。将这些列更改为 INT(6) UNSIGNED,您应该就可以了。

索引是出于性能原因。再次来自 MySQL 文档:

MySQL requires indexes on foreign keys and referenced keys so that foreign key checks can be fast and not require a table scan.

关于mysql - #1005 - mysql - 无法创建外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37645365/

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