我們知道當插入多條數據的時候insert支持多條語句:
復制代碼 代碼如下:
INSERT INTO t_member (id, name, email) VALUES
(1, 'nick', '[email protected]'),
(4, 'angel','[email protected]'),
(7, 'brank','[email protected]');
但是對於更新記錄,由於update語法不支持一次更新多條記錄,只能一條一條執行:
復制代碼 代碼如下:
UPDATE t_member SET name='nick', email='[email protected]' WHERE id=1;
UPDATE t_member SET name='angel', email='[email protected]' WHERE id=4;
UPDATE t_member SET name='brank', email='[email protected]' WHERE id=7;
這裡問題就出現了,倘若這個update list非常大時(譬如說5000條),這個執行率可想而知。
這就要介紹一下在MySql中INSERT語法具有一個條件DUPLICATE KEY UPDATE,這個語法和適合用在需要判斷記錄是否存在,不存在則插入存在則更新的記錄。
具體的語法可以參見:http://dev.mysql.com/doc/refman/5.0/en/insert.html
基於上面這種情況,針對更新記錄,仍然使用insert語句,不過限制主鍵重復時,更新字段。如下:
復制代碼 代碼如下:
INSERT INTO t_member (id, name, email) VALUES
(1, 'nick', '[email protected]'),
(4, 'angel','[email protected]'),
(7, 'brank','[email protected]')
ON DUPLICATE KEY UPDATE name=VALUES(name), email=VALUES(email);
注意:ON DUPLICATE KEY UPDATE只是MySQL的特有語法,並不是SQL標准語法!