我在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)
);
答案 0 :(得分:3)
MySQL仅在REFERENCES
规范的一部分时处理FOREIGN KEY
子句。这是manual:
MySQL解析但忽略“内联
REFERENCES
规范”(如SQL标准中所定义),其中引用被定义为列规范的一部分。 MySQL仅在指定为单独的REFERENCES
规范的一部分时接受FOREIGN KEY
子句。
因此第一个版本不会强制执行外键关系,第二个版本会(假设您正在使用InnoDB
存储引擎)。