MySQL报错无法添加外键约束

标签 mysql

怎么了?

mysql> create table price(
    -> p_code char(1) not null,
    -> p_description varchar(20),
    -> p_rentfee decimal(2,2) not null,
    -> p_dylatefee decimal(2,2));
Query OK, 0 rows affected (0.18 sec)

mysql> create table movie(
    -> mv_no char(4) not null,
    -> mv_name varchar(50) not null,
    -> mv_year char(4) not null,
    -> mv_cost decimal(2,2) not null,
    -> mv_genre varchar(15) not null,
    -> p_code char(1) not null,
    -> foreign key (p_code) references price(p_code));
ERROR 1215 (HY000): Cannot add foreign key constraint

mysql>

最佳答案

price.p_code 不是 price 的主键。尝试:

create table price(
p_code char(1) not null PRIMARY KEY,
p_description varchar(20),
p_rentfee decimal(2,2) not null,
p_dylatefee decimal(2,2));

一般来说,外键必须引用一个主键/唯一键,一个完整的主键/唯一键,除了一个主键/唯一键之外别无其他。

在某些 RDBMS 中,例如 SQL Server,您可以引用具有唯一索引(不是键)的列(参见 can we have a foreign key which is not a primary key in any other table? ),但这不是-标准行为。

关于MySQL报错无法添加外键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15842111/

相关文章:

mysql - 复杂SQL排名查询

php - PHP PDO 是否有内置方法以 ID 作为键返回结果作为数组?

mysql - 基于 select 进行更新以查找重复且小于

php - 这段代码对于 mysql 注入(inject)安全吗?

java - 更新 JPA 表上的 UniqueConstrains

android - SQLite 与远程数据库?

php - 将密码存储在数据库中并确保管理面板的安全

PHP mysqli子查询在读取const表后注意到不可能返回Impossible WHERE

php - MySQL数据库客户端下载

MySQL WHERE NOT EXISTS 错误