在MySQL手册中,我读到“但是,系统没有强制要求引用的列是唯一的或声明为不为空的。”。所以,我试着创建了两个表:
CREATE TABLE album(
id INT,
title VARCHAR(20)) DEFAULT CHARSET=utf8;
CREATE TABLE track2(
album int,
dsk INTEGER,
posn INTEGER,
song VARCHAR(255),
FOREIGN KEY (album) REFERENCES album(id) ) default charset=utf8;
并出现错误:错误1005(HY000):无法创建表“b.track2”(错误号:150)
为什么我不能使用与SQL标准不同,但由MySQL提供并在其手册中描述的特性呢?
最佳答案
我知道怎么做:
create table album2 (id int, title varchar(20), key (id));
create table track2 (
track_id int primary key,
album_id int not null,
title varchar(100),
foreign key (album_id) references album2 (id)
);
mysql> show create table album2;
+--------+-----------------------------
| Table | Create Table
+--------+-----------------------------
| album2 | CREATE TABLE `album2` (
`id` int(11) DEFAULT NULL,
`title` varchar(20) DEFAULT NULL,
KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+--------+-----------------------------
mysql> show create table track2;
+--------+-----------------------------------------------------------------------
| Table | Create Table
+--------+-----------------------------------------------------------------------
| track2 | CREATE TABLE `track2` (
`track_id` int(11) NOT NULL,
`album_id` int(11) NOT NULL,
`title` varchar(100) DEFAULT NULL,
PRIMARY KEY (`track_id`),
KEY `album_id` (`album_id`),
CONSTRAINT `track2_ibfk_1` FOREIGN KEY (`album_id`) REFERENCES `album2` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+--------+-----------------------------------------------------------------------
我只需要在album2中创建非唯一键。
关于mysql - MySQL FK到非唯一字段不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11122656/