使用REPLACE INTO更新数据库

时间:2012-01-24 20:35:01

标签: mysql

我有桌子:

select * from person;

+----+------+---------+
| id | name | surname |
+----+------+---------+
|  1 | John | Doe     |
|  2 | Mary | Smith   |
+----+------+---------+
2 rows in set (0.00 sec)

我需要替换MySQL数据库中的值。所有值都具有相同的ID,所以我在尝试:

replace into person (id,name) values (1,'Victor');

select * from person;
+----+--------+---------+
| id | name   | surname |
+----+--------+---------+
|  1 | Victor | NULL    |
|  2 | Mary   | Smith   |
+----+--------+---------+
2 rows in set (0.00 sec)

问题是它将姓氏设置为NULL。

我知道我可以使用UPDATE person SET name='Victor' WHERE id=1来完成它但是我有一个包含许多INSERT INTO的转储的巨大SQL文件,因此我正在考虑使用REPLACE INTO,因为它具有相同的语法并且会更快,只是进行搜索和替换(INSERT - > REPLACE INTO)。

修改 问题是我有一个像这样的巨大转储文件:

INSERT INTO person (id,name) VALUES (1,'Victor');
INSERT INTO person (id,name) VALUES (2,'Mark');
INSERT INTO person (id,name) VALUES (3,'Steve');
INSERT INTO person (id,name) VALUES (4,'Lou');
INSERT INTO person (id,name) VALUES (5,'Jessica');

等。

所以我正在寻找将所有这些名称更新到数据库中的最简单方法。如果我可以做这样的事情会很棒:UPDATE person SET (id,name) VALUES (1,´Victor')

2 个答案:

答案 0 :(得分:1)

理想情况下,您会使用以下内容:

INSERT INTO person (id, name) values ('1', 'Victor') 
ON DUPLICATE KEY UPDATE name = 'Victor';

REPLACE INTO无法达到您想要的结果的原因是因为REPLACE INTO在功能方面删除了行并将其重新插入您提供的数据。

如果您的数据库转储包含数据库中已有的所有信息以及更新的信息,那么最好只删除表并在干净的数据库上运行导入。如果数据库中存储的数据未包含在转储中,那么导入对于要使用的工具来说太过钝。

可能在每个陈述的最后都有运气ON DUPLICATE KEY UPDATE name = 'foo';

答案 1 :(得分:0)

  

REPLACE是SQL标准的MySQL扩展。它可以插入,删除和插入。

http://dev.mysql.com/doc/refman/5.0/en/replace.html

因此没有将值传递给姓氏。你可以试试

replace into person (id,name,surname) 
values (1,'Victor',(select surname from person where id=1));

但这并不比创建更新语句简单得多,我不确定它是否会起作用。