主页 > 知识库 > 数据库 > MySQL >

mysql一次更新多条不同的记录(2)

来源:中国IT实验室 作者:佚名 发表于:2013-06-27 09:20  点击:
10 | 5 | 600 | | | 11 +----+-----+----+----+ 12 2 rows in set (0.00 sec) 不使用ID,使用唯一索引来替换记录 01 mysql replace into t (c1,c2) values(200,3),(600,7); 02 Query OK, 4 rows affected (0.00 sec)

 10
  |  5 | 600 |    |    |
  11
  +----+-----+----+----+
  12
  2 rows in set (0.00 sec)
  不使用ID,使用唯一索引来替换记录
  01
  mysql> replace into t (c1,c2) values(200,3),(600,7);
  02
  Query OK, 4 rows affected (0.00 sec)
  03
  Records: 2  Duplicates: 2  Warnings: 0
  04
  05
  mysql> select * from t;
  06
  +-----+-----+----+----+
  07
  | id  | c1  | c2 | c3 |
  08
  +-----+-----+----+----+
  09
  | 127 | 200 | 3  |    |
  10
  | 128 | 600 | 7  |    |
  11
  +-----+-----+----+----+
  12
  2 rows in set (0.00 sec)
  效果是id也被替换掉了.
  当使用唯一索引,并重且给唯一索引这一列加了重复的值时
  01
  mysql> replace into t (id,c1) values(127,200),(128,200);
  02
  Query OK, 5 rows affected (0.00 sec)
  03
  Records: 2  Duplicates: 3  Warnings: 0
  04
  05
  mysql> select * from t;
  06
  +-----+-----+----+----+
  07
  | id  | c1  | c2 | c3 |
  08
  +-----+-----+----+----+
  09
  | 128 | 200 |    |    |
  10
  +-----+-----+----+----+
  11
  1 row in set (0.00 sec)
  最后为什么只剩一条记录了?插入(127,200)这一行前,会删掉id=127或c1=200的行,然后执行插入。插入(128,200)这 一行前,会删掉id=128或c1=200的行,刚好前面插入的那一行中,c1=200,所以前面那一行也被删掉了,最后只留下了一行。
  一次最多能更新多少条记录?
  mysql中没有一次更新记录数的限制,但是有sql语句长度的限制。如果需要执行超长的sql语句,需要调整max_allowed_packet这个配置参数。
  max_allowed_packet
  max_allowed_packet sets an upper limit on the size of any single message between the MySQL server and clients, including replication slaves.
  此参数规定mysql服务端和客户端之前的单个消息最大长度,在mysql主从同步时同样有效。

有帮助
(0)
0%
没帮助
(0)
0%