#1005 - mysql - 无法创建外键

时间:2016-06-05 18:30:03

标签: mysql

我在这里创建了这个表:

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

和另一张表:

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是什么?

2 个答案:

答案 0 :(得分:2)

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

来自MySQL文档:

  

外键和引用键中的对应列必须具有相似的数据类型。整数类型的大小和符号必须相同。字符串类型的长度不必相同。对于非二进制(字符)字符串列,字符集和排序规则必须相同。

前两个表中的id列是INT UNSIGNED,但第3个表中的izpulnitel_id和album_id是INT(即带符号)。签名是必须匹配的事情之一。将这些列更改为INT(6)UNSIGNED,您应该在路上。

由于性能原因,索引存在。再次来自MySQL文档:

  

MySQL需要外键和引用键的索引,这样外键检查可以很快,不需要表扫描。

答案 1 :(得分:0)

CREATE TABLE pesen ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, ime VARCHAR(30) NOT NULL, tekst TEXT, izpulnitel_id INT(6) UNSIGNED, album_id INT(6) UNSIGNED, 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 )