簡體   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