我有桌子:
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')
答案 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));
但这并不比创建更新语句简单得多,我不确定它是否会起作用。