update是什么原理呢?

lj_lt 2007-05-25 03:22:59

执行一个update

和执行delete,再insert into,
哪个效率高?
为什么?

好象从update触发器看,内部处理也是先delete,在insert into
是这样的吗?

...全文
501 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
stou 2007-05-30
  • 打赏
  • 举报
回复
学习
lj_lt 2007-05-30
  • 打赏
  • 举报
回复
谢谢大家,特别是最后一只恐龙
最后一只恐龙 2007-05-26
  • 打赏
  • 举报
回复
记入日志和写数据是两个独立的过程,如果你用磁盘阵列,这两个过程能明显区分开。
记入日志时记录的是一条整个的记录,而写入数据文件则只修改需要更新的字段。这些在本科数据库原理课程中有的,可能上学时没注意。
VCLIFE 2007-05-25
  • 打赏
  • 举报
回复
学习
lj_lt 2007-05-25
  • 打赏
  • 举报
回复
zheng(最后一只恐龙) :
更新前的旧值和更新后的新值记入日志,这个好象是对一条记录而言

处理完毕后,再对mdf文件处理,直接找到记录存储位置,覆盖吗?
只覆盖修改的字段,还是整个记录修改,什么原理呢?
最后一只恐龙 2007-05-25
  • 打赏
  • 举报
回复
delete语句的日志中,更新后的新值为空
insert语句的日志中,更新前的旧值为空
最后一只恐龙 2007-05-25
  • 打赏
  • 举报
回复
呵呵,这两个绝对不一样,Update就是直接在记录上修改,效率当然高。
你从触发器看到的东西,是更新日志里面的内容。记录更新前(我说的没错,是之前),先将更新前的旧值和更新后的新值记入日志,更新后触发触发器,里面的inserted表和deleted表就是日志的东西,绝不是先删除后插入的。
lnmhfeng 2007-05-25
  • 打赏
  • 举报
回复
学习
dssw 2007-05-25
  • 打赏
  • 举报
回复
学习了。
hui_hui_2007 2007-05-25
  • 打赏
  • 举报
回复
底层处理据说确实是先delete,再insert,但是使用起来,当然update快些.
hxd001_810 2007-05-25
  • 打赏
  • 举报
回复
从触发器的角度来看,update过程的确是:先delete,再insert。
从单纯的更新角度来看,update过程却是直接覆盖存储单元中原先的value。
二者不能混淆。
yepangxie 2007-05-25
  • 打赏
  • 举报
回复
楼上说的没错,如果主键被别的表作为外键使用,是删除不了的。

不过也有可能是服务器内部作了特殊除了,其实还是delete + insert,只不过insert之后才判断外键约束。
jwt1982 2007-05-25
  • 打赏
  • 举报
回复
不完全是这样

作个很简单测试,一个主外键关联的表,你更新主表数据的话,差距就出来了

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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