- 论坛徽章:
- 0
|
情况是这样的,我用的mysql 5.1.31
create table test1(id int not null primary key,num1 int);
create table test2(test1id int not null,num2 int);
insert into test1 values(1,233);
insert into test2(1,0);
select * from test1,test2;
+----+------+---------+------+
| id | num1 | test1id | num2 |
+----+------+---------+------+
| 1 | 233 | 1 | 0 |
+----+------+---------+------+ |
现在我想把num1的20%转到num2上去,对于例子中的数据,应该是num1减47,num2加47.
执行一个多表联合更新
update test1,test2 set num2=num2+ceil(num1*0.2),num1=num1-ceil(num1*0.2) where id=1 and test1id=id;
mysql> select * from test1,test2;
+----+------+---------+------+
| id | num1 | test1id | num2 |
+----+------+---------+------+
| 1 | 186 | 1 | 38 |
+----+------+---------+------+ |
结果,num1减的是47没错,但是num2只加了38.
也就是说这个update语句中: "set num2=num2+ceil(num1*0.2),num1=num1-ceil(num1*0.2)" 求值顺序不是按照sql语句写得那样,而是先计算了逗号后面的。
请问,这算是mysql的bug还是设计如此(注意单表upate不存在此问题)?
如果是设计如此,那么我用什么方法实现这个逻辑?
注:要求的20%应该是当前表中数据的20%,如果先求出20%是多少,例如47,然后再num2=num2+47,num1=num1-47,则多个客户并发执行时,执行结果会违反要求的逻辑
[ 本帖最后由 oyd_admin 于 2009-6-12 15:45 编辑 ] |
|