MySQL 非常方便地支持多個表之間的關(guān)聯(lián)操作。我們可以使用外鍵將多個表相連接,以實現(xiàn)更高效的數(shù)據(jù)管理。本文將講解如何在 MySQL 中創(chuàng)建多個外鍵。
首先,我們需要同時創(chuàng)建多個相關(guān)聯(lián)的表。例如,我們創(chuàng)建兩個表:學(xué)生信息表(students)和課程信息表(courses)。代碼如下:
CREATE TABLE students( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30) NOT NULL, class VARCHAR(30) NOT NULL, age INT(3) NOT NULL ); CREATE TABLE courses( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30) NOT NULL, teacher VARCHAR(30) NOT NULL );
然后,我們需要在這兩個表中分別創(chuàng)建外鍵。這里我們以課程信息表為例,給其添加一列外鍵,指向?qū)W生信息表中的 id 字段。代碼如下:
ALTER TABLE courses ADD CONSTRAINT FK_courses_students FOREIGN KEY (student_id) REFERENCES students(id);
代碼中,我們使用 ALTER TABLE 語句并添加 CONSTRAINT 約束來設(shè)置外鍵。其中,F(xiàn)K_courses_students 為外鍵的名稱,F(xiàn)OREIGN KEY (student_id) 表示該外鍵關(guān)聯(lián)到 student_id 字段,REFERENCES students(id) 表示關(guān)聯(lián)到 students 表的 id 字段。
注意:在添加外鍵之前,我們需要先創(chuàng)建對應(yīng)的索引。這里我們可以使用 CASCADE 關(guān)鍵字來自動創(chuàng)建外鍵索引。代碼如下:
CREATE INDEX idx_students_id ON students (id) USING BTREE; CREATE INDEX idx_courses_student_id ON courses (student_id) USING BTREE; ALTER TABLE courses ADD CONSTRAINT FK_courses_students FOREIGN KEY (student_id) REFERENCES students(id) ON UPDATE CASCADE ON DELETE CASCADE;
代碼中,我們在兩個表中均創(chuàng)建了索引,并在添加外鍵時使用了 ON UPDATE CASCADE 和 ON DELETE CASCADE 來設(shè)置級聯(lián)操作。這樣就可以在更新或刪除關(guān)聯(lián)表的數(shù)據(jù)時自動更新或刪除相關(guān)的數(shù)據(jù)行。
最后,我們可以通過以下 SQL 語句來驗證是否成功添加了外鍵:
SHOW CREATE TABLE courses;
執(zhí)行后,我們可以看到輸出結(jié)果中的 CREATE TABLE 語句里添加了外鍵約束,表示我們已經(jīng)成功在多個表之間創(chuàng)建了外鍵關(guān)聯(lián)。如下所示:
CREATE TABLE `courses` ( `id` int(6) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(30) NOT NULL, `teacher` varchar(30) NOT NULL, `student_id` int(6) unsigned DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_courses_student_id` (`student_id`), CONSTRAINT `FK_courses_students` FOREIGN KEY (`student_id`) REFERENCES `students` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
以上就是在 MySQL 中創(chuàng)建多個外鍵的方法,希望對讀者有所幫助。