在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/

10-11 02:49
查看更多