updata 语句,疑惑
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的过程具体是怎么实现的啊?
------解决方案--------------------可以把UPDATE理解为先DELETE,后INSERT
------解决方案--------------------update之前必须要找到要update的记录,所以先要运行where语句。
另外一点儿好像就是oracle在update是系统内部会有一个new和old记录,分别记录update前后的值,就想在触发器中的那样
------解决方案--------------------肯定先where啊,不然怎么知道你要干什么?