在MySQL中,建表時(shí)可以利用外鍵約束來(lái)保證數(shù)據(jù)完整性。
首先,建立主表(即包含外鍵的表)和從表(即被引用的表)。主表中需要建立一個(gè)字段作為外鍵,它將引用從表中的某個(gè)字段。
CREATE TABLE people ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50), age INT, country_id INT, FOREIGN KEY (country_id) REFERENCES countries(id) );
在上面的代碼中,people表中的country_id字段被設(shè)置成了外鍵,它將引用countries表中的id字段。
接下來(lái),建立從表,并在其中建立被引用的字段。
CREATE TABLE countries ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) );
在以上代碼中,countries表中的id字段將被people表中的country_id字段引用。
需要注意的是,如果外鍵引用的表或字段不存在,或者被引用的字段不是一個(gè)主鍵或唯一鍵,那么建立外鍵約束時(shí)將會(huì)失敗。
當(dāng)數(shù)據(jù)被插入到主表中時(shí),如果引用的從表中不存在對(duì)應(yīng)的記錄,則會(huì)報(bào)錯(cuò)。
當(dāng)然,外鍵也可以設(shè)置一些屬性,比如ON DELETE CASCADE表示如果從表記錄被刪除,則主表中對(duì)應(yīng)的記錄也會(huì)被刪除。
CREATE TABLE people ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50), age INT, country_id INT, FOREIGN KEY (country_id) REFERENCES countries(id) ON DELETE CASCADE );
這里需要注意的是,外鍵約束只能針對(duì)引擎支持的表類(lèi)型,比如InnoDB,而對(duì)于MyISAM等表類(lèi)型是不支持外鍵約束的。