在MySQL中使用REFERENCES关键字

时间:2015-10-21 10:30:19

标签: mysql reference foreign-keys many-to-many foreign-key-relationship

我在MySQL中有以下表定义。它表示表许可证许可证服务器之间的M:N关系。

create table if not exists  served_license
(
    served_license_id       smallint            not null,
    version                 varchar(16)         not null,
    quantity                smallint            not null,
    expiry_date             char(16)            not null,
    license_server_id       tinyint             not null    references  license_server(license_server_id),
    license_id              varchar(64)         not null    references  license(feature, product),
    primary key (served_license_id)
);

这是关键字 REFERENCES 的正确用法吗?如果我将表定义更改为下面的表定义,那么列的行为会不同吗?

create table if not exists  served_license
(
    served_license_id       smallint            not null,
    version                 varchar(16)         not null,
    quantity                smallint            not null,
    expiry_date             char(16)            not null,
    license_server_id       tinyint             not null,
    license_id              varchar(64)         not null,
    primary key (served_license_id),
    foreign key (license_server_id) references  license_server(license_server_id),
    foreign key (license_id) references license(feature, product)
);

1 个答案:

答案 0 :(得分:3)

MySQL仅在REFERENCES规范的一部分时处理FOREIGN KEY子句。这是manual

的引用
  

MySQL解析但忽略“内联REFERENCES规范”(如SQL标准中所定义),其中引用被定义为列规范的一部分。 MySQL仅在指定为单独的REFERENCES规范的一部分时接受FOREIGN KEY子句。

因此第一个版本不会强制执行外键关系,第二个版本会(假设您正在使用InnoDB存储引擎)。