mysql一次更新多條記錄問題

轉自:http://hi.baidu.com/jackbillow/item/7c7fe220e9dc12d6a417b62d
replace into和insert into on duplicate key 區別

CREATE TABLE `test` (

`id` tinyint(3) unsigned NOT NULL auto_increment,

`name` char(10) NOT NULL default ”,

`dept` char(10) NOT NULL default ”,

`age` tinyint(3) unsigned NOT NULL default ‘0′,

PRIMARY KEY (`id`),

UNIQUE KEY `uni_key` (`name`)

) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 |

mysql> select * from test;

+—-+———+————+—–+

| id | name    | dept       | age |

+—-+———+————+—–+

| 1 | wang   | IT         | 30 |

| 2 | hong    | Accounting | 20 |

| 3 | gang    | Sales      | 40 |

| 4 | raymond | Service    | 20 |

+—-+———+————+—–+

4 rows in set (0.00 sec)

mysql> replace into test (name,dept,age) values(‘gang’,'IT’,25);

Query OK, 2 rows affected (0.00 sec)

mysql> select * from test;

+—-+———+————+—–+

| id | name    | dept       | age |

+—-+———+————+—–+

| 1 | wang    | IT         | 30 |

| 2 | hong    | Accounting | 20 |

| 5 | gang    | IT         | 25 |

| 4 | raymond | Service    | 20 |

+—-+———+————+—–+

4 rows in set (0.00 sec)

mysql> replace into test (name,dept,age) values(‘test’,'IT’,25);

Query OK, 1 row affected (0.00 sec)

mysql> select * from test;

+—-+———+————+—–+

| id | name    | dept       | age |

+—-+———+————+—–+

| 1 | wang    | IT         | 30 |

| 2 | hong    | Accounting | 20 |

| 5 | gang    | IT         | 25 |

| 4 | raymond | Service    | 20 |

| 6 | test    | IT         | 25 |

+—-+———+————+—–+

5 rows in set (0.00 sec)

mysql> replace into test (name,dept) values(‘hong’,'Sales’);

Query OK, 2 rows affected (0.00 sec)

mysql> select * from test;

+—-+———+———+—–+

| id | name    | dept    | age |

+—-+———+———+—–+

| 1 | wang    | IT      | 30 |

| 7 | hong    | Sales   |   0 |

| 5 | gang    | IT      | 25 |

| 4 | raymond | Service | 20 |

| 6 | test    | IT      | 25 |

+—-+———+———+—–+

5 rows in set (0.00 sec)

Replace:

當沒有key衝突時,replace相當於普通的insert.

當與key衝突時,replace覆蓋相關字段,同時auto_increment累加,其它字段填充默認值,可以理解爲刪除重複key的記錄,新插入一條記錄。

mysql> insert into test (name,dept,age) values(‘hong’,'Testing’,24)

    -> on duplicate key update age=age+1;

Query OK, 2 rows affected (0.00 sec)

mysql> select * from test;

+—-+———+———+—–+

| id | name    | dept    | age |

+—-+———+———+—–+

| 1 | wang    | IT      | 30 |

| 7 | hong    | Sales   |   1 |

| 5 | gang    | IT      | 25 |

| 4 | raymond | Service | 20 |

| 6 | test    | IT      | 25 |

+—-+———+———+—–+

5 rows in set (0.00 sec)

mysql> insert into test (name,dept,age) values(‘hong’,'Manager’,24)

on duplicate key update age=100;

Query OK, 2 rows affected (0.00 sec)

mysql> select * from test;

+—-+———+———+—–+

| id | name    | dept    | age |

+—-+———+———+—–+

| 1 | wang    | IT      | 30 |

| 7 | hong    | Sales   | 100 |

| 5 | gang    | IT      | 25 |

| 4 | raymond | Service | 20 |

| 6 | test    | IT      | 25 |

+—-+———+———+—–+

5 rows in set (0.00 sec)

Insert into …on duplicate key:

當與key衝突時,只update相應字段值。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章