mysql有一个不符合SQL标准的地方需注意。
在mysql中,如果在一个update语句中更改了多列的值,这些更改是有次序的,改完了第一列再改第二列,改完第二列再改第三列,依此类推。SQL标准的要求是更改不依赖于次序,所有更改都使用右端表达式在这条update语句之前的值,不会使用update语句执行过程中的值。
mysql文档提供的一个例子是:
UPDATE t1 SET col1 = col1 + 1, col2 = col1;
假如原来col1和col2的值都是1,那么改完后两者的值都是2。如果按照SQL标准,改完后的值应该分别是2和1。
如果该语句写成:
UPDATE t1 SET col2 = col1, col1 = col1 + 1;
那么改完后两者的值分别是2和1。这个结果和SQL标准要求的一致。
所以,在更改多列时,需要注意赋值的次序问题。