1. 程式人生 > 其它 >MySQL資料庫——外來鍵約束詳解

MySQL資料庫——外來鍵約束詳解

#什麼是外來鍵約束
#一張表中的某個欄位引用另一個表的主鍵
#主表: 約束別人
#副表/從表: 使用別人的資料,被別人約束    

-- 已有表增加外來鍵語法
ALTER TABLE 從表 ADD [CONSTRAINT] [外來鍵約束名稱] FOREIGN KEY (外來鍵欄位名) REFERENCES 主表(主鍵欄位名);

# 一對多關係時,一般將多的一方作為從表,並在從表上新增外來鍵約束
-- studentcourse(從表)上建立與student(主表)的外來鍵約束
ALTER TABLE studentcourse  ADD CONSTRAINT Stu_StuCourse_fk FOREIGN
KEY(student_id)REFERENCES student(id); -- studentcourse(從表)上建立與course(主表)的外來鍵約束 ALTER TABLE studentcourse ADD CONSTRAINT Course_StuCourse_fk FOREIGN KEY(course_id)REFERENCES course(id); -- course(從表)上建立與teacher(主表)的外來鍵約束 ALTER TABLE course ADD CONSTRAINT Teacher_Course_fk FOREIGN KEY(teacher_id)REFERENCES
teacher(id); #注意事項: -- 1外來鍵約束欄位的資料型別、大小必須一致否則報1215 Cannot add the foreign key constraint -- 2建表時,建立外來鍵約束操作不當,可能會自動建立無關索引 -- 3無關索引可能會對外來鍵約束造成影響,導致無法正確的插入外來鍵約束,嘗試刪除索引 -- 建立索引語法 CREATE INDEX indexName ON table_name (column_name) -- 更改索引語法 ALTER TABLE tableName ADD INDEX indexName(columnName) -- 刪除索引語法
DROP INDEX indexName ON course; -- eg刪除course上的無關索引 DROP INDEX teacher_id ON course; -- eg刪除studentcourse上的索引 DROP INDEX cid_ref_scid_fk ON studentcourse;

新增外來鍵約束後的表結構