我在这里创建了这个表:
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是什么?
答案 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 )