簡體   English   中英

MySQL錯誤無法添加外鍵約束

[英]MySQL error cannot add foreign key constraint

怎么了?

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,您可以參考一列具有唯一索引(未鍵)(見我們能有一個外鍵這是不以任何其他表的主鍵? ),但是這是不規范的行為.

  • 引擎應該是相同的,例如 InnoDB
  • 數據類型應該相同,並且長度相同。 例如 VARCHAR(20)
  • Collat​​ion Columns 字符集應該相同。 例如 utf8
    注意:即使您的表具有相同的排序規則,列仍然可能具有不同的排序規則。
  • 唯一- 外鍵應該指的是被引用表中唯一的字段(通常是主鍵)。

p_code應該是price表中的主鍵:

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),
-> PRIMARY KEY ( p_code ));

p_code設置為鍵,或者將其設置為唯一鍵主鍵

  1. 引用的列price.p_code必須是唯一的(需要創建主鍵或唯一鍵)。
  2. 兩個表都必須是InnoDb表,在CREATE TABLE語句中使用ENGINE = INNODB

子列的數據類型必須與父列完全匹配。 例如,由於 price.p_code 是一個 char(1),movie.p_code 也需要是一個 char(1),而 price.p_code 需要是一個主鍵或需要創建一個索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM