SQL中的REPLACE与INSERT

时间:2015-04-09 13:26:50

标签: mysql sql replace

我正在执行以下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?

4 个答案:

答案 0 :(得分:16)

根据documentation,区别在于:

  

REPLACE的工作原理与INSERT完全相同,只是如果表中的旧行与PRIMARY KEY或UNIQUE索引的新行具有相同的值,则在插入新行之前删除旧行。

它的作用是什么:

  • 尝试使用其中一个可用索引来匹配行;
  • 如果该行尚不存在:添加一行;
  • 如果该行已存在:删除现有行并在之后添加新行。

什么时候使用它可以对单独的insertupdate语句有用?

  • 你可以放心地调用它,你不必担心现有的行(一个声明与两个声明);
  • 如果您希望在inserting / updating时删除相关数据,则可以使用replace:它也会删除所有相关数据);
  • 当触发器需要触发时,你期望insert(不好的理由,好的)。

答案 1 :(得分:3)

所有数据库引擎都没有广泛理解第一次替换。

第二次替换基于主键插入/更新记录。使用更新时,您可以指定更复杂的条件:

UPDATE person SET first_name = 'old ' + first_name WHERE age > 50

UPDATE也不会创建记录。

答案 2 :(得分:1)

更新将根据特定条件更改表中的现有记录值。因此,您可以在单个查询中更改一个或多个记录。

如果表中没有记录,则插入或替换将插入新记录。 替换仅在当前且仅当您在插入或替换查询中提供主键值时才有效。如果您忘记添加主键字段值而不是在表格中创建新记录。

案例: -

更新:您根据使用列值的公式计算工资。在这种情况下,您将始终使用更新查询作为使用单个查询,您可以更新多个记录。

插入或替换:已在您分享的链接中提及。

答案 3 :(得分:0)

如果该行不存在,

UPDATE将无效。

如果行不存在,INSERTREPLACE会插入,如果存在,则替换值。