2012-01-24 72 views
2

我有表:更新數據庫替換爲INTO

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'); 

等。

所以I'm希望更新所有那些名字到最簡單的方法數據庫。如果我能做這樣的事情會很棒:UPDATE person SET (id,name) VALUES (1,´Victor')

回答

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';

+0

數據庫轉儲不包含所有信息,只是id和新名稱。 –

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)); 

但這並沒有比創建更新語句更簡單,我不確定它會工作。