我在这里创建了这个表:
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
);我想用两个外键做第三张桌子:
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
)但由于某些原因,无法创建该表。外键操作符周围有某种错误,很可能是索引标记。
我试着用CREATE INDEX ...添加单独的查询,但似乎不起作用。我应该用父表的创建来创建这些索引,还是有另一个解决方案?这些指数到底是做什么用的?
发布于 2016-06-05 18:42:52
在创建外键时,非常重要的(读:必需)是使用的列具有相同的类型。
来自MySQL文档:
外键和引用键中的对应列必须具有类似的数据类型。整数类型的大小和符号必须相同。字符串类型的长度不一定相同。对于非二进制(字符)字符串列,字符集和排序规则必须相同。
前两个表中的id列为INT无符号,但第三个表中的izpulnitel_id和album_id为INT(即签名)。签名是必须匹配的事情之一。将这些列更改为INT(6)未签名,您应该已经上路了。
这些索引是出于性能原因而存在的。同样来自MySQL文档:
MySQL需要对外键和引用键进行索引,这样外键检查就可以快速而不需要表扫描。
发布于 2016-06-05 18:56:10
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 )https://stackoverflow.com/questions/37645365
复制相似问题