更新的好处是什么,而不是删除然后插入同一个表中

时间:2009-01-09 08:46:37

标签: sql-server-2005 insert

我有一个表示例“ABC”,我有一行需要存储到这个“ABC”表中。我计划更新它而不是从表中删除然后插入。这会对数据库产生什么影响?在,表级,页面级别,时间,成本和每件事。

7 个答案:

答案 0 :(得分:11)

我不是100%肯定你在问什么,但我会在黑暗中拍摄。执行DELETE然后INSERT到表中以更新信息是一个非常糟糕的主意。

为什么呢?因为如果你有另一个表引用ABC的外键,你将失去你的引用。也就是说,除非您使用与旧(已删除)记录相同的PK设置新记录的PK。在这种情况下,你为什么不首先更新?

此外,DELETING然后INSERTing是两个操作,而UPDATEing是一个,使得DELETE和INSERT(理论上)花费更多时间。

还有易用性因素。如果删除然后INSERT,则必须手动跟踪每个列值。如果你更新,你只需要知道你想要改变什么。

答案 1 :(得分:2)

更新是更新表格的简单快捷方式。

答案 2 :(得分:2)

DELETE&与UPDATE相比,INSERT操作需要更长的时间。如果你想只更改行中的一列,则需要更多时间。然后DELETE和INSERT会很复杂。

答案 3 :(得分:1)

UPDATE显然是首选,但是根据RDBMS使用DELETE-INSERT是为了避免LOCK,因此它可以提供大量的并发访问。这是一种常见的技术。

某些数据库在磁盘上使用固定大小的记录,因此UPDATE很快。这是一个就地操作。 其他一些DB使用可变大小的记录。在这样的DB中,DELETE / INSERT与UPDATE的区别并不大,因为UPDATE实际上标记了旧的元组/索引死了,写了一个新的元组,然后让垃圾收集器在以后回收死元组。

答案 4 :(得分:0)

更新将更改现有行,这是一个简单的操作,而删除后跟插入将更适合数据库。

另外,如果使用标识列,delete和insert可能会破坏对行的引用。

编辑: 实际上,有时您会想要删除并插入而不是更新。如果您不知道要更新的数据是否存在,可能是为了简化您的逻辑。然后执行删除然后执行插入比检查行是否存在然后根据检查结果执行更新或插入更容易。

此外,您可能希望更新任何标识列,具体取决于您使用它的方式(例如,如果您使用它来跟踪表的最新更改)。

但一般来说,进行更新比删除和插入操作少,所以如果可以,你应该总是使用它。

答案 5 :(得分:0)

使用UPDATE而不是DELETE / INSERT的关键优势是您可以选择仅更新行中更改的字段(这比DELETE后跟INSERT快得多)。

答案 6 :(得分:0)

UPDATE的好处之一还在于ACID数据库的实际定义 - 原子性。