插入可以考虑先插入到缓存区,再复合插入.update比较复杂,在update背后其实隐藏着潜在的约束关系:定义用于更新其他数据集的数据为源数据,被更新的数据称为目标数据,原数据集合与目标数据之间的关联键,在源数据集中一定唯一。不会存在着目标数据一次更新过程中被更新2次。upd...
显示全部插入可以考虑先插入到缓存区,再复合插入.
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里面还可以写成更新可更新视图的方法
delete语句产生的重做日志量比较大,在删除比较多的时候,可以考虑把delete语句转化为insert语句
这样产生的日志量会少些
此外考虑到增删改与索引复杂的关系,这里面也有很多
收起