一、本次數據庫中有student,course,sc表,其設置情況
1 -- 創建course表 2 CREATE TABLE `course` ( 3 `cno` varchar(3) NOT NULL, 4 `cname` varchar(12) DEFAULT NULL, 5 `lhour` int(11) DEFAULT NULL, 6 `credit` int(11) DEFAULT NULL, 7 `semester` varchar(2) DEFAULT NULL, 8 PRIMARY KEY (`cno`) 9 ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 10 11 -- 創建student表 12 CREATE TABLE `student` ( 13 `sno` varchar(6) NOT NULL, 14 `sname` varchar(6) DEFAULT NULL, 15 `sex` varchar(2) DEFAULT NULL, 16 `bdate` datetime DEFAULT NULL, 17 `dept` varchar(8) DEFAULT NULL, 18 `classno` varchar(4) DEFAULT NULL, 19 PRIMARY KEY (`sno`) 20 ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 21 22 -- 創建sc表 23 CREATE TABLE `sc` ( 24 `sno` varchar(6) NOT NULL, 25 `cno` varchar(3) NOT NULL, 26 `grade` int(11) DEFAULT NULL, 27 PRIMARY KEY (`sno`,`cno`), 28 -- 這里直接插入外鍵 29 foreign KEY (`sno`) references `student`.`student`(`sno`), 30 foreign KEY (`cno`) references `student`.`course`(`cno`) 31 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
這是創建表時直接插入外鍵,也可以創建表后再對sc表插入外鍵
1 -- 建表之后再對表中添加外鍵 2 alter table `sc` 3 add foreign key (`sno`) 4 references `student`(`sno`); 5 6 alter table `sc` 7 add foreign key (`cno`) 8 references `course`(`cno`);
二、驗證其參照完整性。這個時候,我們再對sc表添加student表里沒有的sno,course表沒有的cno,都不被允許。刪除student表或course表中sc中出現過的sno(cno)的行和列時,也不被允許。
例,刪除student表
三、workbench的bug(?)
在workbench進行刪除操作的時候,即使設置了外鍵,也是可以刪除表的
這個時候再加載數據就會有問題,在左上方點刷新數據庫按鈕的時候,就會出現數據加載有問題錯誤
實際上設置外鍵時就不能只刪除主表了,這不符合參照完整性約束,會出bug,workbench編譯就沒有考慮到這個;
並且這不是我的mysql版本的問題,我的是8.0版本,使用命令行就沒有問題,顯示不能刪除。