- 論壇徽章:
- 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 |
+----+------+---------+------+ |
現(xiàn)在我想把num1的20%轉(zhuǎn)到num2上去,對(duì)于例子中的數(shù)據(jù),應(yīng)該是num1減47,num2加47.
執(zhí)行一個(gè)多表聯(lián)合更新
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 |
+----+------+---------+------+ |
結(jié)果,num1減的是47沒(méi)錯(cuò),但是num2只加了38.
也就是說(shuō)這個(gè)update語(yǔ)句中: "set num2=num2+ceil(num1*0.2),num1=num1-ceil(num1*0.2)" 求值順序不是按照sql語(yǔ)句寫(xiě)得那樣,而是先計(jì)算了逗號(hào)后面的。
請(qǐng)問(wèn),這算是mysql的bug還是設(shè)計(jì)如此(注意單表upate不存在此問(wèn)題)?
如果是設(shè)計(jì)如此,那么我用什么方法實(shí)現(xiàn)這個(gè)邏輯?
注:要求的20%應(yīng)該是當(dāng)前表中數(shù)據(jù)的20%,如果先求出20%是多少,例如47,然后再num2=num2+47,num1=num1-47,則多個(gè)客戶并發(fā)執(zhí)行時(shí),執(zhí)行結(jié)果會(huì)違反要求的邏輯
[ 本帖最后由 oyd_admin 于 2009-6-12 15:45 編輯 ] |
|