MySQL中的外鍵(Foreign Key)是指用于連接兩個(gè)表的字段,它建立了表格間的關(guān)系,它負(fù)責(zé)維護(hù)本表與外部表間的一致性,并能保證所有的引用完整性。Foreign Key的作用是保證表與表之間的數(shù)據(jù)關(guān)系的一致性,確保“數(shù)據(jù)的準(zhǔn)確性和完整性”。
CREATE TABLE `employee`( `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, `name` varchar(50) NOT NULL, `age` int(11) NOT NULL, `department_id` int(11) NOT NULL, CONSTRAINT `fk_department_id` FOREIGN KEY (`department_id`) REFERENCES `department` (`id`) )ENGINE=InnoDB DEFAULT CHARSET=utf8;
如上述代碼所示,MySQL中,對(duì)于employee表所屬部門的department_id,我們建立了外鍵fk_department_id,將它與department表的id相連。這意味著當(dāng)我們?cè)赿epartment表刪除一個(gè)部門時(shí), 同時(shí)employee表中的員工所在的這個(gè)部門的department_id就會(huì)變成無效的。外鍵可以起到保護(hù)數(shù)據(jù)完整性的作用,防止出現(xiàn)一些不合理的情況,如刪除某個(gè)部門時(shí),該部門中員工信息在employee表中還存在。
在MySQL中,還可以通過使用cascade來設(shè)置級(jí)聯(lián)更新/刪除。級(jí)聯(lián)操作就是指,當(dāng)被參照主鍵表的主鍵發(fā)生改變時(shí),與其建立了Foreign Key的從表的外鍵也相應(yīng)的發(fā)生改變,以保證數(shù)據(jù)的完整性。
CREATE TABLE `employee`( `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, `name` varchar(50) NOT NULL, `age` int(11) NOT NULL, `department_id` int(11) NOT NULL, CONSTRAINT `fk_department_id` FOREIGN KEY (`department_id`) REFERENCES `department` (`id`) ON DELETE CASCADE ON UPDATE CASCADE )ENGINE=InnoDB DEFAULT CHARSET=utf8;
在上述代碼中,我們添加了ON DELETE CASCADE ON UPDATE CASCADE,這意味著當(dāng)我們?cè)赿epartment表刪除一個(gè)部門時(shí),employee中所有部門為此部門的員工都會(huì)被刪除。同樣的,如果我們?cè)赿epartment表更新一個(gè)部門的id時(shí),employee中也會(huì)相應(yīng)更新。