Stu表
CREATE TABLE `Stu` ( `s_id` varchar(255) NOT NULL, `s_name` varchar(255) , PRIMARY KEY (`s_id`) USING BTREE ); CREATE TABLE `Course` ( `c_id` varchar(255) NOT NULL, `c_name` varchar(255) , PRIMARY KEY (`c_id`) USING BTREE ); CREATE TABLE `Score` ( `r_id` int(0) NOT NULL AUTO_INCREMENT, `s_id` varchar(255), `c_id` varchar(255), `score` int(0), PRIMARY KEY (`r_id`) USING BTREE, INDEX `s_id`(`s_id`) USING BTREE, INDEX `c_id`(`c_id`) USING BTREE, CONSTRAINT `c_id` FOREIGN KEY (`c_id`) REFERENCES `Course` (`c_id`) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT `s_id` FOREIGN KEY (`s_id`) REFERENCES `Stu` (`s_id`) ON DELETE RESTRICT ON UPDATE RESTRICT );数据
Stu表
s_ids_name2017-XAB-3653李五句2017-XAB-3663崔大机2017-XAB-3669武杀朱Course表
c_idc_nameAV-170001结构力学AV-275455量子力学AV-999900流体力学Score表中的s_id列指向Stu表中的s_id列
Stu表中的s_id列是其PRIMARY KEY
Score表中的s_id列是Score表的PRIMARY KEY
Score表中的c_id列指向Course表中的c_id列
Course表中的c_id列是其PRIMARY KEY
Score表中的c_id列是Score表的PRIMARY KEY
若向Score表中插入一行数据,其中s_id,c_id值必须在Stu表,Course表中已经存在,否则会报错
可以看到插入是没有问题的,因为这条语句中的s_id,c_id的值都在Stu与Course表中存在
若现在李五句有门课编号为BV-000001,成绩为80分,现在尝试插入Score表中显示插入错误,因为c_id = BV-000001在其指向的Course表中不存在,产生了约束错误
若现在有位同学编号为X-47-W,其量子力学成绩为80分,现在尝试插入Score表中同样显示因为外键约束错误,插入失败,因为s_id的值在Stu表中不存在
