甲骨文日记(5)-oracle9i UPDATE Statement

 update语句允许我们更新表或者视图的某几行几列数据。通过where语句来控制更新的行数通过set语句来控制更新的列数,完整的语法如下:


1.省略where子句

 图片上有一点表述不准确,对于update,where子句是可以省略的,表示更新所有行,就相当于“where 1=1”;delete语句的where子句也可以省略,表示删除表或者视图的所有行。

 下面我们来举个栗子~

 下面是我们做示范使用的test表,里面已经插入的三行数据:

 我们分别执行三条update语句,第一条省略where,第二条不省略,第三条是"where 1=1":


 结果很明显,update省略了where就默认更新所有行了,这是个很危险的操作,试想一下如果我们在公司的数据库用update时把where语句忘了,更新完数据库后如果有意外发生(比如停电了,或者备份数据损坏)导致无法回滚,那估计会被祭天吧o(╥﹏╥)o~

 下面贴出例子中使用的SQL代码:

create table test(
  id number(6,0) not null,
  name varchar2(20) not null,
  school varchar2(20)
);
desc test;
-- 插入3行数据
insert into test(id,name,school) values(100008,'wuxi1','hengshui');
insert into test(id,name,school)  values(100009,'wuxi2','hengshui');
insert into test(id,name,school)  values(100010,'wuxi3','hengshui');
select * from test;
-- 省略where,更新所有行
update test set name='lixiansheng';
-- 不省略where,更新id为100009的行
update test set name='hahaha' where id='100009';
-- 不省略where,更新所有行
update test set school='danfeng' where 1=1;
select * from test;

2.子查询只能返回一行数据

update语句中set子句支持子查询,但是子查询只能返回一行,如果多行就会报错,接着上面的例子:

-- 子查询1,返回两行
update test set (name,school)=(
  select name,school from test where id > 100008
) ;
-- 子查询2
update test set school=(
  select school from test where id > 100008
) ;



 综上所示, update里面的set语句可以支持子查询,但是只能返回一行数据

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值