2015-06-20 78 views
2

SQL中的UPDATE命令如何工作?
我有一个表有三列a,b,c,其中a是主键。
表中的值是(1,2,3),(2,4,5)。
假设我想更新这个元组,并将列c的值设置为4,其中a的值为1.
元组(1,2,3)是否被删除,然后插入新的元组?
或值1,2保持不变3将被删除并插入4?SQL UPDATE命令如何工作

+1

你正在使用哪些DBMS? Postgres的?甲骨文?在_how_上的实际实现是在技术上实现的,幕后是_highly_ DBMS依赖(有时甚至依赖于涉及的表的实际语句以及任何可能的索引) –

+0

对于SQL Server更新可以在位,或者删除/插入或混合的两个。 http://stackoverflow.com/a/14082375/73226 –

回答

0

这应该修改表条目不增加新的元组到表

UPDATE tableName 
SET c='4' 
WHERE a='1' 
+0

更新语句只覆盖已更改的数据。数据库服务器可能必须将您的数据记录物理移动到新页面,但这对您而言是透明的。 1 + 2中的数据保持不变。 – PhillipH

+0

SQL中的UPDATE命令如何工作? – HelloNewWorld

+0

是更新的值只改变其他值不受影响。 – nifCody

-1

更新table_name的 集合C = '4' 其中a = '1';

这将工作正常,没有任何问题,它不会删除或添加一个新的元组到您的表。

+0

链接到文档以解释您的答案,并教他们如何解决问题,而不是简单地提供答案会更好。感谢您给出答案! – ToothlessRebel

-1

简短的回答是,UPDATE首先查找所有匹配的行(您正在调用元组),然后修改它们。它不会删除或添加任何行。

然而UPDATE声明将火都 DELETEINSERT触发,如果任何定义。因此,从某个角度来看,它看起来似乎是一个删除和一个插入。

编辑:我的意思说的是,当一个UPDATE触发闪光,UPDATE之前的数据都在DELETED pseudotable可用,而UPDATE后的数据出现在INSERTED pseudotable。从这个意义上说,只有UPDATE看起来有点像删除加插入。我对上述错误陈述表示歉意。

+0

对我而言,这是一件愚蠢的事情。用我真正的意思编辑。 –

0

由于您没有指定哪些数据库特别感兴趣,因此我将选择MySQL。 (但是说大多数其他关系数据库具有类似的实现方式并不太遥不可及。)

简而言之,MySQL UPDATE支持单表语法和多表语法。在这两种情况下,元组都不会被删除,然后重新插入。编辑直接发生在由SET子句指定的列中。

就在docs的顶部,它说,

对于单表的语法,在用新值命名表中现有行的UPDATE语句更新的列。

然后

对于多表的语法中,在每个表UPDATE更新行中满足的条件table_references命名。即使匹配条件多次,每个匹配行也会更新一次。

没有提及DELETE THEN RE-INSERT操作。在你的情况,是的,值1和2保持不变,而3被替换为4.