微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章​

问题描述

数据库是我们前后端不可缺少的东西,数据库中最多的就是数据,当我们初次插入数据时,在一个表中的数据相对较少时我们可以一行一行的插入,但当我们遇到有逻辑关联的数据时,我们插入就会报错,我们该怎么插入呢?

解决方案

在某个数据库的一张course表中,有cno、cname、cpno、ccredit四个属性列,分别为课程号,课程名,先行课号和成绩,先给大家解释一下什么是先行课就例如我们很多课为基础课,我们必须要先学完基础课才能学习在此课程基础之上的课程。

对于这种有依赖的数据该怎么插入呢?我们最常用的插入语句就是insert语句,但这个语句如果在大批量的数据时这个语句就可能就不是很方便,我们就会用批量插入的方法:


insert into s values('s1','精益','天津'),

('s2','万胜','北京'),('s3','东方','北京'),

('s4','丰泰隆','上海'),('s5','康健','南京')


这是一种批量插入的方法,这种方法会相对便捷一点,但当将这种方法应用到这种具有逻辑性的表中时,就会发现这个语句会报错。


insert into course values('1','数据库','5',4),

('2','数学','',2),

('3','信息系统','',4),

('4','操作系统','6',3),

('5','数据结构','7',4),

('6','数据处理','',2),

('7','PASCAL语言','6',4)


数据库|数据库入门(二)_批量插入

图2.1 结果

对于这种相对较少的数据我们可以依照逻辑性一条一条的插入,但我们也要依据这张表中的逻辑性插入数据,这样对于数据较多时就会较麻烦。


insert into course values('1','数据库','5',4);

insert into course(cno,cname,ccredit) values('2','数学',2);

insert into course(cno,cname,ccredit) values('3','信息系统',4);

insert into course values('4','操作系统','6',3);

insert into course values('5','数据结构','7',4);

insert into course(cno,cname,ccredit) values('6','数据处理',2);

insert into course values('7','PASCAL语言','6',4);


我们还可以利用另一种方法插入这些数据,就是insert语句中的select语句,这样我们就能批量插入啦。


insert into course

select '6','python',null,'周老师','5'

select '3','大学英语',null,'贺老师','4'

select '2','信息安全','1','马老师','4'

select '1','数据库','4','刘老师','5'

select '4','概率论','5','王老师','5'

select '5','高等数学',null,'张老师','6'


结语

在不同的SQL sever版本中会存在命令不兼容的情况,所以在不同的版本中可能会出现报错的情况,本次命令在SQL sever 2008中运行。


微信号:算法与编程之美          

数据库|数据库入门(二)_批量插入_02