0

我还没有真正了解 REPLACE INTO 的工作原理。据我了解,如果任何值与旧行值匹配,它将删除该行并插入更新的数据?

例如我有这张桌子

+-------------+----------------+------+---------+
| name        | value          | city | address |
+-------------+----------------+------+---------+
| First book  | a value        | NY   | NULL    |
| second book | an other value | LA   | NULL    |
+-------------+----------------+------+---------+

现在我想改变第二本书的城市并执行

REPLACE INTO book(name,value,city) VALUES ('second book','an other value','CA');

注意:名称和值是相同的,但 mysql 仍然插入一个新行?

+-------------+----------------+------+---------+
| name        | value          | city | address |
+-------------+----------------+------+---------+
| First book  | a value        | NY   | NULL    |
| second book | an other value | LA   | NULL    |
| second book | an other value | CA   | NULL    |
+-------------+----------------+------+---------+
4

3 回答 3

3

您可以从此链接中阅读:

上面两个 SQL 命令的结果可以使用单个查询来实现——使用 REPLACE INTO。REPLACE 语句的工作方式与 INSERT 查询相同。唯一的区别是他们处理重复记录的方式。如果表上存在唯一索引并且您尝试插入具有先前插入的键值的记录,则该记录将首先被删除并插入新记录。

这意味着仅当表中存在唯一键并且您尝试插入该键上存在的值时,它才会更新。在那种情况下,更新,否则,使插入

于 2012-08-27T01:32:17.373 回答
1

MySQL 需要知道如何识别行到REPLACE. 做到这一点的方法是拥有一个唯一的键,简单地插入数据就会违反。

在您的示例中,一种解决方案是UNIQUE KEYname. 然后你REPLACE会正常工作。

于 2012-08-27T01:32:01.937 回答
0

尝试使用INSERT ON DUPLICATE KEY UPDATE,但要确保你有一个name应该是unique key.

INSERT INTO book (`name`, `value`, `city`)
VALUES ('second book', 'an other value', 'CA')
ON DUPLICATE KEY 
UPDATE `value` = 'an other value',
        `city` = 'CA'

请参阅示例链接
INSERT ON DUPLICATE KEY UPDATE 与 REPLACE INTO 性能

于 2012-08-27T01:32:15.377 回答