MySQL一對多級聯刪除
在MySQL數據庫中,涉及到一對多關系的數據,我們要實現刪除時,往往需要進行級聯刪除。所謂級聯刪除,就是在刪除父表記錄的同時,自動刪除與之相關的子表記錄,以保證數據的完整性。
下面我們以一個例子來說明一對多級聯刪除的實現方法。
示例:
假設我們有兩張表:學生表(students)和選課表(courses),學生表包含學生信息,選課表記錄學生選修的課程信息。一個學生可以選多門課程,因此選課表中每個學生會有多條記錄。
學生表結構如下:
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;
選課表結構如下:
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字段為外鍵,關聯到學生表的id字段上,ON DELETE CASCADE
表示設置級聯刪除。
接下來我們模擬一下刪除操作:
DELETE FROM `students` WHERE `id` = 1;
執行以上語句后,MySQL會自動將學生表中id=1的記錄刪除,同時將與該學生相關的選課表中的所有記錄也一并刪除。
使用級聯刪除可以簡化我們的操作,但要謹慎使用,確保數據的完整性和安全性。