通常,我们使用以下SQL语句来更新字段值:UPDATE mytable SET myfield='value' WHERE other_field='other_value';但是,如果你要更新多行数据,并且每一行记录的每个字段值都不一
通常,我们使用以下SQL语句来更新字段值:
UPDATE mytable SET myfield='value' WHERE other_field='other_value';
但是,如果你要更新多行数据,并且每一行记录的每个字段值都不一样,你会怎么做?首先,您可能会想到使用循环来执行多个UPDATE语句,如下面的python程序示例:
for x in xrange(10): sql = ''' UPDATE mytable SET myfield='value' WHERE other_field='other_value'; '''
这种方法没有任何问题,代码简单易懂。但是,在loop语句中执行了多个SQL查询。在优化系统的时候,我们总是想尽可能的减少数据库查询的次数,从而减少资源占用,提高系统速度。幸运的是,有一个更好的解决方案,只是SQL语句稍微复杂一点,但是您只需要执行查询一次。语法如下:
这种SQL语句很好理解,就是使用了很多编程语言中常见的关键字CASE,根据id字段的值来判断不同分支的类型。
如果需要更新一行记录中的多个字段,可以使用以下SQL语句:
上述方案大大减少了数据库查询操作的次数,节省了系统资源。
不过这个有个缺点:需要注意的问题是SQL语句的长度,需要考虑程序运行环境支持的字符串长度。当然,这也可以通过更新mysql设置来扩展。
当然python这样强大的语言也为我们提供了executemany这样强大的方法,不仅可以插入数据,还可以更新数据。作为一个经常做事的人,这些东西要经常互相使用,结果才能比较。
这样不是更方便吗,但是速度问题?我觉得还是和第二个结合起来比较好。