update比较复杂,在update背后其实隐藏着潜在的约束关系:定义用于更新其他数据集的数据为源数据,被更新的数据称为目标数据,原数据集合与目标数据之间的关联键,在源数据集中一定唯一。不会存在着目标数据一次更新过程中被更新2次。 update可能出现更新丢失这种比较隐蔽的错误 错误: update test1 set test1.name=(select test2.name from test2 where test1.id=test2.id) 正确: update test1 set test1.name=(select test2.name from test2 where test1.id=test2.id) where test1.id in (select id from test2); 还可以可以用mege语句来避免更新丢失: merge into test1 using test2 on (test1.id=test2.id) when matched then update set test1.name=test2.name; 在oracle里面还可以写成更新可更新视图的方法