在Mysql中,单表的更新操作,通常由左向右顺序执行,所以:
UPDATE t1 SET col1 = col1 + 1, col2 = col1;
上面这条语句的执行结果是col2被赋予col1更新后的值,而不是col1原来的值,即现在col2与col1有相同的值。Mysql的这个特点有别于标准SQL。
对于多表的更新操作,Mysql不保证语句会以任何特殊的顺序去执行。并且,在多表更新中,不能使用ORDER BY和LIMIT子句。多表之间的连接语法类似SELECT,可以参考JOIN Syntax。举两个例子:
UPDATE items,month SET items.price=month.price WHERE items.id=month.id;
UPDATE basic_info SET like_num = like_num_total - ( SELECT ( SELECT COUNT(*) FROM like_ip WHERE do_time < '1375450740' AND id = basic_info.id )+( SELECT COUNT(*) FROM like_user WHERE do_time < '1375450740' AND id = basic_info.id ) )
除此之外,如果你想更新某张表,并且又在子查询中查这张表,这个操作是无法执行的。如果你更新某列的值为它的当前值,Mysql将不会执行该UPDATE操作。