SQL中的UPDATE命令如何工作?
我有一个包含三列a,b,c的表,其中a是主键
表中的值是(1,2,3),(2,4,5)
假设我想更新这个元组并将列c的值设置为4,其中a的值为1
是否删除了元组(1,2,3),然后插入了新的元组?
或者值1,2保持不变3被删除而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
语句会触发DELETE
和INSERT
个触发器(如果已定义)。因此,从某个角度看,它似乎确实是删除和插入。
编辑:我想说的是,当UPDATE
触发器触发时,UPDATE
之前的数据在DELETED
可伪造的情况下可用,而UPDATE
出现在INSERTED
伪表后的数据。从这个意义上说,只有UPDATE
看起来有点像删除和插入。我为上面的错误陈述道歉。
答案 3 :(得分:-1)
更新table_name 设置c ='4' 其中a ='1';
这样可以正常运行而不会出现任何问题,并且不会删除或添加新元组到您的表中。