注:
1、此博客借鉴了中国人民大学王珊和萨师煊老师合著的《数据库系统概论(第五版)》,高等教育出版社出版。
2、使用的是MYSQL8.0以上的数据库,工具为MySQL Workbench
3、重点解决外键报错问题```Cannot add or update a child row: a foreign key onstraint fails (databaseexperiment.sc, CONSTRAINT sc_ibfk_2 FOREIGN KEY (Cno) REFERENCES course (Cno))
``
#准备工作为:安装好并可以使用的MYSQL,安装过程不在此赘述。

一、进入MSQL Workbench

点击Local insatance MYSQL连接进入,初次登入需要输入数据库密码(安装过程中设置的密码)。
在这里插入图片描述

二、创建Student、Course、SC表

步骤一

点击左上角File ——New Model——取一个名字(databaseexperiment)——Apply——Apply——Finsh。在左边点击刷新就可以看到自己建的连接,双击(加粗表示连接,正在使用这个连接)。
在这里插入图片描述

步骤二

建表方法一:非代码法建表

1、在Tables上右键点击Create Table…

在这里插入图片描述

2、对表取名字,表的属性名(双击才能填写)、属性类型、PK(主键)、NN(不允许为空)、UQ、、、其他的不再解释右下角有英文。

在这里插入图片描述

3、然后Apply到Finsh,表建成后就可以插入数据了。

建成的表还可以进行再次修改 把鼠标放到course(数据库里大小写都一样)表上,点击第二个按钮就可以再次修改,修改后Apply就OK了。
在这里插入图片描述

建表方法二:代码法建表

如图所示。
在这里插入图片描述

# 创建Student表
create table STUDENT
(Sno char(20)primary key,
Sname char(20)unique,
Ssex char(2),
Sage smallint,
Sdept char(20)
); 
#单句执行 用时按Ctrl和Enter键
#创建Course表
create table COURSE
(Cno char(4)primary key,
Cname char(40)not null,
Cpno char(4),
Ccredit smallint,
foreign key(Cpno)references COURSE (Cno)
); 
#创建SC表
create table SC
(Sno char(20),
Cno char(4),
Grade smallint,
primary key(Sno,Cno),
foreign key(Sno)references STUDENT(Sno),
foreign key(Cno)references COURSE(Cno)
);

三、对Sduent、Course、SC表插入数据时需要注意

(一)、Student表数据插入

# Student插入数据时这样没什么问题。
insert into STUDENT(Sno,Sname,Ssex,Sage,Sdept) values('201215121','李勇','男',20,'CS');
insert into STUDENT(Sno,Sname,Ssex,Sage,Sdept) values('201215122','刘晨','女',19,'CS');
insert into STUDENT(Sno,Sname,Ssex,Sage,Sdept) values('201215123','王敏','女',19,'MA');
insert into STUDENT(Sno,Sname,Ssex,Sage,Sdept) values('201215125','张立','男',19,'IS');
select *from student;#显示表 当然也可以点击再次修改表的右边那个表格图标
#多执行 用时按Ctrl、Shift、Enter键

在这里插入图片描述

(二)、Course表数据插入

但如果Course也按照Student表的方式插入时会有问题

在这里插入图片描述

报错:

在这里插入图片描述
insert into COURSE(Cno,Cname,Cpno,Ccredit)values(‘1’,‘数据库’,‘5’,4)
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (databaseexperiment.course, CONSTRAINT course_ibfk_1 FOREIGN KEY (Cpno) REFERENCES course (Cno))

原因是:建Course表使用了以下这条语句,使用了外键,并且外键参考了表Course本身。一开始Course里面没有数据,但插入数据时却参考了Course表自身的Cpno(先修课)属性,违背了一致性和系统完整性。

foreign key(Cpno)references COURSE (Cno)

解决方法:

1、先插入部分数据
insert into COURSE(Cno,Cname)values('1','数据库');
insert into COURSE(Cno,Cname)values('2','数学');
insert into COURSE(Cno,Cname)values('3','信息系统');
insert into COURSE(Cno,Cname)values('4','操作系统');
insert into COURSE(Cno,Cname)values('5','数据结构');
insert into COURSE(Cno,Cname)values('6','数据处理');
insert into COURSE(Cno,Cname)values('7','PASCAL语言');
#这一块要先执行,再执行下面那块代码

在这里插入图片描述

2、再用更新语句“插入”剩余数据
update COURSE set Cpno='5',Ccredit = 4 where Cno = '1';
update COURSE set Cpno=NULL,Ccredit = 2 where Cno = '2';#注意不能将Cpno=NULL写成Cpno=''
update COURSE set Cpno='1',Ccredit = 4 where Cno = '3';
update COURSE set Cpno='6',Ccredit = 3 where Cno = '4';
update COURSE set Cpno='7',Ccredit = 4 where Cno = '5';
update COURSE set Cpno=NULL,Ccredit = 2 where Cno = '6';
update COURSE set Cpno='6',Ccredit = 4 where Cno = '7';

在这里插入图片描述

(三)、SC表数据插入

#虽然SC表也使用了外键,但在Course插入数据之后可以按常规方法插入
#先把Course数据插入之后再对SC表进行插入数据
insert into SC(Sno,Cno,Grade) values('201215121','1',92);
insert into SC(Sno,Cno,Grade) values('201215121','2',85);
insert into SC(Sno,Cno,Grade) values('201215121','3',88);
insert into SC(Sno,Cno,Grade) values('201215122','2',90);
insert into SC(Sno,Cno,Grade) values('201215122','3',80);
select *from SC; 

在这里插入图片描述
到此Student、Course、SC表就建好了。感谢阅读,祝学业有成!

初学者写的博客难免有缺陷,还请各位提出宝贵意见!

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐