SQL UPDATE命令的工作原理

时间:2015-06-20 05:45:57

标签: sql sql-update

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

4 个答案:

答案 0 :(得分:1)

由于您没有指定哪些数据库特别有用,我将选择MySQL。 (但是,大多数其他关系数据库都有类似的实现方式,这并不是太牵强。)

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

docs的顶部,它表示

  

对于单表语法,UPDATE语句使用新值更新指定表中现有行的列。

然后

  

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

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

答案 1 :(得分:0)

这应该编辑你的表条目而不是将新元组添加到你的表

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

答案 2 :(得分:0)

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

然而 UPDATE语句会触发DELETEINSERT个触发器(如果已定义)。因此,从某个角度看,它似乎确实是删除和插入。

编辑:我想说的是,当UPDATE触发器触发时,UPDATE之前的数据在DELETED可伪造的情况下可用,而UPDATE出现在INSERTED伪表后的数据。从这个意义上说,只有UPDATE看起来有点像删除和插入。我为上面的错误陈述道歉。

答案 3 :(得分:-1)

更新table_name 设置c ='4' 其中a ='1';

这样可以正常运行而不会出现任何问题,并且不会删除或添加新元组到您的表中。