SQL学习笔记----第三天(如何新增更新和删除学生成绩记录)

如何新增更新和删除学生成绩记录--目录

前言

在一个数据库中,特别是OLTP(On-Line Transaction Processing 联机事务处理过程)的系统中,数据路记录的增删改查几乎是时刻发生的,这些操作也正体现了关系型数据库的主要功能,今天和大家一起了解一下表记录的增删改查操作。


1.1 新增记录

在数据库中记录的新增、更新和删除分别使用insert、update、delete完成,在更新和删除表记录之前,需要有一张表以及表中有待更新和删除的数据,下面的SQL语句将创建一张有数据的表:

create table elective/_test as select * from elective;
select * from elective_test

这个SQL语句是将elective表数据复制到了elective_test
结果集:
在这里插入图片描述
上面的SQL语句创建了一张与学生选课课表elective具有相同属性和记录的表elective_test,当然这种创建表的语法在Orcale、postgreSQL和MySQL中都是支持的,如果希望在SQLServer中实现同样的功能,就需要使用下面的SQL:

select * into elective_test from elective

上面两个例句后面都可以加上where子句,这样就可以使用部分数据创建一张新表了。
如果只希望向已经存在的表elective_test新增一行或部分数据,就可以使用insert关键字来实现:

insert into elective_test(id,sid,cid,createtime,grade)
select id,sid,cid,createtime,grade from elective where cid ="26"

插入表 elecctive_test的数据行数由where条件来决定,如果将where条件去掉,上面SQL语句会将表elective中的所有数据复制到表elective_test中。
如果希望新增的数据由自己定义,而非其他表已存在的数据,就可以使用下面insert values 语句:

insert into elective_test(id,sid,cid,createtime,grade) values(15,'1006','20',now(),91.2);

和insert、select语句一样,上面SQL语句列出了新增数据的列名一一对应,其中now()为MySQL中获取当前系统时间的函数,其他三种主流数据库也都有各自获取系统时间的函数和方法,而且存在一定差异。

1.2更新记录

准备好具有数据的表,就可以对表elective_test进行做更新操作了,数据库中更新表的语法为:

update table_name set column1 = value1,column2 = value2,... where some_colum = some_value;

首先看下面这条更新特定行的例句,同时可以使用select语句查看原始数据和更新之后的数据:

select * from elective_test where cid='26' and sid='1003';
update elective_test set grade = 86 where cid = '26' and sid= '1003';
select * from elective_test where cid ='26' and sid= '1003'

结果集:
在这里插入图片描述例句中使用where条件限制了更新行,只更新满足课程编号为26且学生编号为1003的记录,该行记录的grade子段值最终被更新为86
如果需要更新表中的所有行,只需要将where筛选条件去掉即可:

update elective_test set createtime = '2018-09-01 10:12:12'

结果集:
在这里插入图片描述语句执行后,表中 createtime 字段值全部更新成为 ‘2018-09-01 10:12:12’,所以在对表做更新操作时,一定要仔细确认是否对全部记录做更新操作,如果不是,一定要加上 where 关键字限制条件。
上面的例句是更新单个字段列,如果需要更新列表elective_test的多个列,可以使用下面的语句:

update elective_test set grade=88,createtime= '2019-10-01 10:10:01' where cid ='26' and sid ='100';
select * from elective_test where cid = '26' and sid='1003'

结果集:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210102165327131.png
更新多个列时,在set关键词后面,每个值=列,后面使用英文逗号分割(最后一列后不适用逗号)

3.删除记录

数据库做删除操作的格式:

delete from table_name where some_column = some_value;

如果要删除表elective_tes中特定的行记录,就可以使用以下的SQL:

`delete from elective_test where`cid= '26'and sid= '1003';

语句执行成功之后,再次使用select语句查询该条记录就会返回空数据,所以在做delete操作之前也需要仔细检查SQL语句是否正确,避免删除有用的数据。
如果需要删除所有行,可以使用下面的语句来完成:

delete from elective_test

当然使用delete操作会产生日志数据,尤其是当待清空表数据量很大时,产生的日志会占用太多的存储空间,数据库为我们提供了一种更方便的清空表的操作:

truncate table elective_test

truncate操作不会产生日志数据,但也为我们误删后恢复数据提供了难度,所以更应该谨慎使用。值得注意的是,在ORCALE中 update、delete、insert等操作后要默认手动提交commit操作,只有这样才能算语句执行完成,其他三种数据库是默认自动提交的,不需要手动执行提交操作。

由于delete操作被记录了日志,如果是通过delete误删除的数据,可以通过日志来恢复。而truncate误操作没有被记录日志,所以无法通过日志来恢复,只能通过更复杂的方式做恢复处理。

小结

数据库的增删改查操作,特别是删除和修改很容易出现误操作,最终导致数据的丢失和混乱,除了在SQL脚本上进行严格把关,也可以通过权限进行控制,只将表的这些操作的权限赋予个别用户,另外做好备份也是保证数据不丢失的常用方法。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值