我正在执行以下SQL教程:http://sql.learncodethehardway.org/book/ex11.html
在本练习中,作者在第二段中说:
在这种情况下,我想用另一个人替换我的记录 保持独特的身份。问题是我要做DELETE / INSERT 在事务中使其成为原子,或者我需要做一个完整的更新。
有人可以向我解释一下UPDATE的问题是什么, 时我们可能会选择REPLACE而不是UPDATE?
更新代码:
UPDATE person SET first_name = "Frank", last_name = "Smith", age = 100
WHERE id = 0;
这是REPLACE代码:
REPLACE INTO person (id, first_name, last_name, age)
VALUES (0, 'Frank', 'Smith', 100);
编辑:我想我的另一个问题是你为什么要做一个DELETE / INSERT,而不仅仅是引用部分讨论的UPDATE?
答案 0 :(得分:16)
根据documentation,区别在于:
REPLACE的工作原理与INSERT完全相同,只是如果表中的旧行与PRIMARY KEY或UNIQUE索引的新行具有相同的值,则在插入新行之前删除旧行。
它的作用是什么:
什么时候使用它可以对单独的insert
和update
语句有用?
inserting
/ updating
时删除相关数据,则可以使用replace
:它也会删除所有相关数据); insert
(不好的理由,好的)。答案 1 :(得分:3)
所有数据库引擎都没有广泛理解第一次替换。
第二次替换基于主键插入/更新记录。使用更新时,您可以指定更复杂的条件:
UPDATE person SET first_name = 'old ' + first_name WHERE age > 50
UPDATE也不会创建记录。
答案 2 :(得分:1)
更新将根据特定条件更改表中的现有记录值。因此,您可以在单个查询中更改一个或多个记录。
如果表中没有记录,则插入或替换将插入新记录。 替换仅在当前且仅当您在插入或替换查询中提供主键值时才有效。如果您忘记添加主键字段值而不是在表格中创建新记录。
案例: -
更新:您根据使用列值的公式计算工资。在这种情况下,您将始终使用更新查询作为使用单个查询,您可以更新多个记录。
插入或替换:已在您分享的链接中提及。
答案 3 :(得分:0)
UPDATE
将无效。
如果行不存在,INSERT
或REPLACE
会插入,如果存在,则替换值。