【数据库】SQL更新数据之增删改

数据库中的数据变更,主要有三种:插入数据inset、修改数据update、删除数据delete。这几种操作都是开发人员常用的操作,本文将对这几种操作进行简要讲解。

insert操作及注意事项;

update操作及注意事项;

delete操作及注意事项;

1、insert操作

insert操作用于向表中插入新的数据,insert操作既可以单条插入,也可以与子查询结合使用实现批量插入。

1.1单条插入

对于insert操作来说,单条插入是最常用的方式,其语法形式如下所示。

insert into 表名(列名1, 列名2,列名3.....列名n)

values(值1,值2,值3.....值n)

在insert操作中,列名列表中的各列需要以逗号分隔;而值列表指定各列的值,列名与值需要一一对应。

insert into students(stuent_id, student_name,student_age,status)

values(12,'张三',12,'act')

其中,insert into students 用于向表students中插入新的数据;student_id,student_name, student_age,status指定列名列表;values(12,'张三',12,'act')则为各列指定要插入的值。

当然,如果insert语句所指定的列名列表包含了表中的所有列,那么可以列名列表省略,如下:

insert into  values(12,'张三',12,'act');


1.2批量插入

子查询中,可以在插入语句中使用子查询,以实现批量插入,接下来还有另外一个例子:

表c_students的数据结构及内容如下所示:

select * from c_students;

student_id    student_name

可以利用如下SQL语句向其中插入新的数据,新数据来自表students中student_id处于前10的学生信息。

insert into c_students(student_id,student_name)

select student_id, student_name

from students

where student_id <=10;

说明:insert into c_students用于向表c_students中插入数据;select student_id, student_name from students where student_id <=10则指定要插入的数据。在这里,新插入的数据来自select语句选定的结果集合,注意,此处没有values关键字,这也是单条插入与批量插入的区别所在。

此时,表c_students中已成功插入了10条记录。


1.3注意事项与技巧
insert操作语法简单,也是开发人员掌握的最熟练的SQL语句之一,在实际开发过程中,有以下问题和技巧需要注意。

A. 应该养成使用列名列表的习惯

在一条插入语句中,即使为表中所有列都赋值,也不应该省略列名列表。在一个应用系统中,很难保证数据表结构不发生改变。


报错:insert语句执行时,缺少足够的值。

B. 快速获得列名列表

对于表结构比较简单的数据表,例如c_students,一一罗列其列名并不困难,但是当数据结构复杂,列的数目较大时,一一罗列所有的列名耗时耗力且极易出错,此时,我们应该使用工具获得列名列表。以PL/SQL Devloper为例,相应的步骤如下所示。

(1)在PL/SQL Develpoler右侧的对象列表中找到对应的表。以表tmp_user_objects为例,在对象列表中的位置下图:

(2)右击tmp_user_objects下的columns分支,将弹出快捷菜单,如下图:


(3)选择快捷菜单中的Copy comma separated选项,可以将列名列表以字符串的形式复制到黏贴板中。各列之间使用comma(逗号)进行分割。


(4)打开任意的文本编辑器,将列名列表黏贴到文本编辑器中,即可。


2.update操作

update操作用于更新已有数据。

2.1 update更新单列

update操作的语法形式如下:

update 表名 set 列 = 新值

其中,update命令用于更新表中数据,其后紧跟表名;set命令用于重新设置列值,其后紧跟列名,并用等号指定新值。

例子:在表students中,列status的值均为小写形式。可以利用update语句将其转换为大写形式。

update students set status = upper(status);

其中,set status = upper(status)用于为表students中的status列赋予新值,新值为原列值的大写形式。


2.2 update更新多列

使用update语句,同样可以更新多列,其语法如下所示。

update 表名 set 列1 = 新值1, 列2=新值2,....

在set命令之后,可以为多列同时赋值,而这些列之间使用逗号进行分隔。

例子:对于表students中的学生信息,可以在修改列status的同时,修改列student_age的值。例如:除了将status进行大写转换之外,还需要将学生年龄student_age增加1,相应的SQL语句如下所示。

update students set student_age = student_age +1, status = upper(status);

set student_age = student_age +1, status = upper(status)用于设置表students中列student_age与列status的新值。当两个列都被成功更新之后,可以查询表中实际数据进行验证。


2.3注意事项

对于update操作,最容易被用户忽视的就是添加where 条件,在上面的例子中,所进行的操作实际是非常危险的。因为没有添加任何限制条件,因此oracle将更新表中的所有数据。而实际应用中,往往只需更新部分数据,因此,对于重要数据的update操作,首先添加where关键字是一个好的习惯,尽管有时并不需要过滤条件。

当然,如果要修改的数据表非常重要,首先进行备份是最为稳妥的方式,接着遵守如下步骤,将极大的减少用户出错的几率。

(1)首先搜寻表中的记录,并确认这些记录是预期进行修改的数据。

select * from students where student_id = 1;

当我们预期修改student_id为1的记录时,可以首先利用where student_id=1的条件获得记录,以确认预期修改的数据。

(2)利用update语句,并结合where条件修改数据。

update students set status = 'CXL' where student_id = 1;

where student_id =1所指定的条件与步骤(1)中经过确认的where 条件相同。

(3)查看修改后的数据,确认无误之后,再提交修改;否则,回滚操作。

SQL>select * from students where student_id = 1;

SQL>commit;   commit命令用于修改确认之后提交数据。提交之后,不可回滚。


3、delete操作

delete操作用于删除表中数据。除了delete语句之外,truncate命令同样可以删除表中数据。本段落将说明delete操作及delete操作与truncate操作的区别。

3.1 delete操作

delete操作用于删除表中的数据,其使用语法如下所示。

delete from 表名

delete from 指定从哪个表中删除数据,因为删除动作的作用对象为记录级别。因此,无须定列名信息。

例子:我们可以利用delete命令删除students中employee_id大于10的记录,相应的SQL语句如下:

delete from students where student_id > 10:

如同update 语句,在使用delete语句时,添加where 子句是一个好的习惯。这样可以避免删除表中的所有数据。


3.2 delete 操作与truncate table 操作

除了delete命令,oracle还可以利用truncate table命令删除表中的数据,但是truncate table语句与delete语句是有本质区别的:

delete语句与insert、update语句同属于DML-数据操作语言的范畴,当数据修改之后,可以通过回滚操作,忽略所做的数据修改。

而truncate table语句则是数据DDL---数据定义语言的范畴,当数据被删除之后,无法回滚。

例子:通过truncate table 命令删除表students的数据。

truncate table students;

分析查询结果可知,当执行了truncate table 命令之后,表students中的数据将被完全删除。

delete操作与truncate table操作具有不同的应用场合,当删除部分数据时,应该使用delete语句,并添加where条件;删除全部数据时,应该使用truncate table语句。同时,truncate table 删除全表数据时,效率也要高于delete语句。


  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值