MySQL中的多對多關系是指兩個表之間的關系,在其中一個表中,一個記錄可以被多個另一個表中的記錄引用,同時在另一個表中一個記錄也可以被多個第一個表中的記錄引用。這種關系可以通過一個中間表來實現,中間表通常包含兩個外鍵,分別引用關聯的兩個表中的記錄。
CREATE TABLE IF NOT EXISTS `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `course` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `student_course` ( `student_id` int(11) NOT NULL, `course_id` int(11) NOT NULL, PRIMARY KEY (`student_id`,`course_id`), KEY `fk_course_idx` (`course_id`), CONSTRAINT `fk_course` FOREIGN KEY (`course_id`) REFERENCES `course` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `fk_student` FOREIGN KEY (`student_id`) REFERENCES `student` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
以上代碼是實現多對多關系的示例。在這個示例中,我們有兩個表:一個是學生(student)表,另一個是課程(course)表。我們通過一個中間表(student_course)來維護學生和課程之間的多對多關系。在中間表中,我們定義了兩個外鍵,一個引用student表中的記錄,另一個引用course表中的記錄。同時,我們在中間表中定義了一個聯合主鍵,確保中間表中不存在重復的記錄。
在多對多關系中,我們通常使用JOIN語句實現查詢操作。例如,我們可以使用以下SQL語句查詢某一個學生所選的所有課程。
SELECT course.id, course.name FROM course JOIN student_course ON course.id = student_course.course_id WHERE student_course.student_id = 1;
以上SQL語句中,我們首先連接course表和student_course表,通過student_course中的外鍵引用找到對應的course記錄。然后,通過WHERE語句限定student_id為1,以查詢該學生所選的所有課程記錄。