我还没有真正理解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 |
+-------------+----------------+------+---------+
答案 0 :(得分:3)
您可以阅读this link:
上面两个SQL命令的结果可以使用单个查询来实现 - 使用REPLACE INTO。 REPLACE语句的工作方式与INSERT查询的工作方式相同。唯一的区别是他们处理重复记录的方式。如果表上存在唯一索引,并且您尝试插入具有先前插入的键值的记录,则将首先删除该记录并插入新记录。
这意味着只有在表中存在唯一键时才会更新,并且您尝试插入此键上存在的值。在那种情况下,更新,否则,插入
答案 1 :(得分:1)
MySQL需要知道如何识别REPLACE
行。这样做的方法是使用一个唯一的密钥,只需插入数据就会违反。
在您的示例中,一种解决方案是在UNIQUE KEY
上放置name
。然后您的REPLACE
将正常运行。
答案 2 :(得分: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'
See Example Link
的 INSERT ON DUPLICATE KEY UPDATE vs REPLACE INTO performance 强>