“无法添加外键约束”

时间:2018-05-04 08:45:21

标签: mysql

DROP TABLE IF EXISTS CARD_ACCOUNT;
Create Table CARD_ACCOUNT(
acct_no Char(16),
exp_date date,
card_type ENUM('Debit','Credit') NOT NULL,
cust_ID integer NOT NULL
);

DROP TABLE IF EXISTS DEBIT_CARD;
Create Table DEBIT_CARD(
acct_no Char(16),
exp_date date,
bank_no CHAR(9) NOT NULL,
Constraint debit_card_pk primary key(acct_no,exp_date),
Constraint debit_card_fk foreign key(acct_no,exp_date) References card_account(Acct_no,exp_date)
ON UPDATE CASCADE
ON DELETE CASCADE
);

当我尝试运行这个语句时,我在Debit_Card表的Mysql中得到一个“无法添加foregin键约束”的错误,为什么我得到这个错误我正在学习的脚本所有内容的写法都和我一样

2 个答案:

答案 0 :(得分:1)

card_account(Acct_no,exp_date)如果要在外键中引用它,则必须是主键。

为什么你不把它变成一张桌子?

Create Table CARD_ACCOUNT(
   acct_no Char(16),
   exp_date date,
   bank_no CHAR(9) NOT NULL,
   card_type ENUM('Debit','Credit') NOT NULL,
   cust_ID integer NOT NULL,
   Constraint CARD_ACCOUNT_PK primary key(acct_no,exp_date)
);

我认为它有同样的目的。你已经有card_type知道它的借记卡还是信用卡,为什么要为此制作单独的表呢?

答案 1 :(得分:0)

使用下面的代码,我刚刚在第一个表中添加了一个主键约束,它将允许您创建外键。但是,由于“ Tim Biegeleisen ”评论存在数据库设计问题,您应该再考虑一下您的数据库设计。

DROP TABLE IF EXISTS CARD_ACCOUNT;
Create Table CARD_ACCOUNT(
acct_no Char(16),
exp_date date,
card_type ENUM('Debit','Credit') NOT NULL,
cust_ID integer NOT NULL,
Constraint debit_card_pk primary key(acct_no,exp_date)
);

DROP TABLE IF EXISTS DEBIT_CARD;
Create Table DEBIT_CARD(
acct_no Char(16),
exp_date date,
bank_no CHAR(9) NOT NULL,
Constraint debit_card_pk primary key(acct_no,exp_date),
Constraint debit_card_fk foreign key(acct_no,exp_date) References card_account(Acct_no,exp_date)
ON UPDATE CASCADE
ON DELETE CASCADE
);