MySQL一對多級聯(lián)刪除
在MySQL數(shù)據(jù)庫中,涉及到一對多關(guān)系的數(shù)據(jù),我們要實現(xiàn)刪除時,往往需要進行級聯(lián)刪除。所謂級聯(lián)刪除,就是在刪除父表記錄的同時,自動刪除與之相關(guān)的子表記錄,以保證數(shù)據(jù)的完整性。
下面我們以一個例子來說明一對多級聯(lián)刪除的實現(xiàn)方法。
示例:
假設(shè)我們有兩張表:學(xué)生表(students)和選課表(courses),學(xué)生表包含學(xué)生信息,選課表記錄學(xué)生選修的課程信息。一個學(xué)生可以選多門課程,因此選課表中每個學(xué)生會有多條記錄。
學(xué)生表結(jié)構(gòu)如下:
CREATE TABLE `students` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(50) NOT NULL,`age` int(11) NOT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
選課表結(jié)構(gòu)如下:
CREATE TABLE `courses` (`id` int(11) NOT NULL AUTO_INCREMENT,`student_id` int(11) NOT NULL,`course_name` varchar(50) NOT NULL,PRIMARY KEY (`id`),KEY `FK_courses_students` (`student_id`),CONSTRAINT `FK_courses_students` FOREIGN KEY (`student_id`) REFERENCES `students` (`id`) ON DELETE CASCADE) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
其中選課表的student_id字段為外鍵,關(guān)聯(lián)到學(xué)生表的id字段上,ON DELETE CASCADE
表示設(shè)置級聯(lián)刪除。
接下來我們模擬一下刪除操作:
DELETE FROM `students` WHERE `id` = 1;
執(zhí)行以上語句后,MySQL會自動將學(xué)生表中id=1的記錄刪除,同時將與該學(xué)生相關(guān)的選課表中的所有記錄也一并刪除。
使用級聯(lián)刪除可以簡化我們的操作,但要謹(jǐn)慎使用,確保數(shù)據(jù)的完整性和安全性。