繁体   English   中英

“无法添加前向键约束”

[英]“Cannot add foregin key constraint”

 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键约束”错误,为什么我从正在学习的脚本中得到的所有内容都与我写的完全一样,却出现此错误。

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

为何不将其放入1张桌子?

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来知道它是借记卡还是信用卡,那么为什么要为此单独创建一个表?

使用下面的代码,我刚刚在第一个表中添加了一个主键约束,它将允许您创建外键。 但是,正如“ 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
);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM