MySQL是目前比較流行的關(guān)系型數(shù)據(jù)庫(kù)軟件之一。在MySQL中,為了確保數(shù)據(jù)完整性,可以使用外鍵來(lái)建立表與表之間的關(guān)聯(lián)。
在定義外鍵的時(shí)候,我們通常會(huì)使用單列作為外鍵。但是,在某些情況下,使用多列作為外鍵可能更為合適。比如,在一個(gè)訂單表中,我們有訂單ID、客戶ID和產(chǎn)品ID三個(gè)字段,如果我們希望訂單表與客戶表和產(chǎn)品表建立關(guān)聯(lián),我們可以考慮使用多個(gè)列作為外鍵。
下面是一個(gè)使用多列主鍵做外鍵的例子:
CREATE TABLE customers ( customer_id INT NOT NULL, customer_name VARCHAR(50) NOT NULL, PRIMARY KEY (customer_id) ) ENGINE=InnoDB; CREATE TABLE products ( product_id INT NOT NULL, product_name VARCHAR(50) NOT NULL, PRIMARY KEY (product_id) ) ENGINE=InnoDB; CREATE TABLE orders ( order_id INT NOT NULL, customer_id INT NOT NULL, product_id INT NOT NULL, order_date DATE, PRIMARY KEY (order_id), FOREIGN KEY (customer_id, product_id) REFERENCES customers(customer_id, product_id) ON DELETE CASCADE ) ENGINE=InnoDB;
在上面的例子中,我們定義了三個(gè)表:customers、products和orders。在orders表中,我們使用了customer_id和product_id兩個(gè)字段作為外鍵,這兩個(gè)字段需要同時(shí)引用customers表和products表中的數(shù)據(jù)。
在定義外鍵的時(shí)候,我們需要在FOREIGN KEY子句中使用多個(gè)列名,并將它們用括號(hào)括起來(lái)。在REFERENCES子句中,我們也需要引用多個(gè)列名,并將它們用逗號(hào)分隔開來(lái)。
另外需要注意的是,我們?cè)诙x外鍵時(shí),需要將表的存儲(chǔ)引擎設(shè)置為InnoDB。因?yàn)镸ySQL只有在使用InnoDB存儲(chǔ)引擎時(shí)才支持外鍵約束。