亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 2666 | 回復(fù): 3
打印 上一主題 下一主題

這是mysql update語(yǔ)句求值順序的一個(gè)Bug嗎? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2009-06-12 15:22 |只看該作者 |倒序?yàn)g覽
情況是這樣的,我用的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 編輯 ]

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2009-06-12 16:33 |只看該作者
你可以這么做:
UPDATE test1 a,
test2 b,
(
SELECT *
FROM test1, test2
WHERE id =1
AND test1id = id
)c
SET b.num2 = c.num2 + ceil( c.num1 * 0.2 ) ,
a.num1 = c.num1 - ceil( c.num1 * 0.2 )
WHERE a.id = c.id AND b.test1id = c.test1id

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2009-06-12 17:16 |只看該作者
謝謝啊,很管用。

論壇徽章:
9
每日論壇發(fā)貼之星
日期:2016-01-04 06:20:00數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-01-04 06:20:00每日論壇發(fā)貼之星
日期:2016-01-04 06:20:00數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-01-04 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-01-04 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-01-04 06:20:00綜合交流區(qū)版塊每日發(fā)帖之星
日期:2016-01-04 06:20:00綜合交流區(qū)版塊每日發(fā)帖之星
日期:2016-01-04 06:20:00數(shù)據(jù)庫(kù)技術(shù)版塊每周發(fā)帖之星
日期:2016-03-07 16:30:25
4 [報(bào)告]
發(fā)表于 2009-06-12 17:49 |只看該作者
update test1 ,test2 ,test1 as temp1
    set test2.num2 = temp1.num1 * 0.2 ,
       test1.num1 = temp1.num1 * 0.8
    where temp1.id=1 and test1.id=temp1.id and test1.id=test2.test1id;
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP