updata 语句,疑惑

物润声无 2013-05-16 09:16:12



drop table test
-- create table
create table test(
id int,
is_error char
)
-- insert data
insert into test values(1, 'N')
commit
-- 修改出现在where 后面的字段。一直以为这样写是会出错的!!!
update test set is_error= 'Y' where is_error= 'N'
--1 row updated,
select * from test
1, Y
-- 结果已经更改


头脑中修改出现在where 后面的字段,是不行的, 可是测试结果却没错,google结果也可以。

UPDATE test
SET object_name = 'LOAD'
WHERE object_name = 'DUAL';

然后又google 了sqlserver, 也可以,又在mysql 上测了下也可以, 今天在写一段sql的时候,第一反应就是这种写法,可是随即又否定了这种写法,结果多写了些代码, 把问题复杂化了.
为什么我会有这种想法?印象中曾经这样写出过错。 但是在哪里碰到的呢?

顺便问问:updata语句的顺序:

先 updata 再where 把筛选后的结果集存放再临时表中, 然后set, 即给指定字段设特定值。然后再将临时表中的结果集merge到原表中,是这样的吗? 如果是的, 这个merge的过程具体是怎么实现的啊?
...全文
118 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010412956 2013-05-16
  • 打赏
  • 举报
回复
肯定先where啊,不然怎么知道你要干什么?
wushangjimo 2013-05-16
  • 打赏
  • 举报
回复
update之前必须要找到要update的记录,所以先要运行where语句。 另外一点儿好像就是oracle在update是系统内部会有一个new和old记录,分别记录update前后的值,就想在触发器中的那样
sych888 2013-05-16
  • 打赏
  • 举报
回复
可以把UPDATE理解为先DELETE,后INSERT

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧