我知道你可以一次插入多行,是否有一种方法可以一次更新多行(如在,在一个查询)在MySQL?
编辑:
例如,我有以下内容
Name id Col1 Col2
Row1 1 6 1
Row2 2 2 3
Row3 3 9 5
Row4 4 16 8
我想将以下所有更新组合成一个查询
UPDATE table SET Col1 = 1 WHERE id = 1;
UPDATE table SET Col1 = 2 WHERE id = 2;
UPDATE table SET Col2 = 3 WHERE id = 3;
UPDATE table SET Col1 = 10 WHERE id = 4;
UPDATE table SET Col2 = 12 WHERE id = 4;
为什么没有人在一个查询中提到多个语句?
在php中,使用mysqli实例的multi_query方法。
来自php手册
MySQL允许在一个语句字符串中包含多条语句。一次发送多个语句可以减少客户端-服务器之间的往返,但需要特殊处理。
下面是更新30,000 raw中与其他3种方法的比较结果。代码可以在这里找到,这是基于@Dakusan的回答
事务:5.5194580554962
插入:0.20669293403625
例:16.474853992462
多:0.0412278175354
如您所见,多语句查询比最高答案更有效。
如果你得到这样的错误信息:
PHP Warning: Error while sending SET_OPTION packet
你可能需要增加mysql配置文件中的max_allowed_packet,在我的机器是/etc/mysql/my.cnf,然后重新启动mysqld。
为什么没有人在一个查询中提到多个语句?
在php中,使用mysqli实例的multi_query方法。
来自php手册
MySQL允许在一个语句字符串中包含多条语句。一次发送多个语句可以减少客户端-服务器之间的往返,但需要特殊处理。
下面是更新30,000 raw中与其他3种方法的比较结果。代码可以在这里找到,这是基于@Dakusan的回答
事务:5.5194580554962
插入:0.20669293403625
例:16.474853992462
多:0.0412278175354
如您所见,多语句查询比最高答案更有效。
如果你得到这样的错误信息:
PHP Warning: Error while sending SET_OPTION packet
你可能需要增加mysql配置文件中的max_allowed_packet,在我的机器是/etc/mysql/my.cnf,然后重新启动mysqld。