新聞中心
小編給大家分享一下MySQL自定義變量實(shí)現(xiàn)row_number分析函數(shù)的問題示例,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
網(wǎng)站的建設(shè)創(chuàng)新互聯(lián)建站專注網(wǎng)站定制,經(jīng)驗(yàn)豐富,不做模板,主營網(wǎng)站定制開發(fā).小程序定制開發(fā),H5頁面制作!給你煥然一新的設(shè)計(jì)體驗(yàn)!已為成都辦公窗簾等企業(yè)提供專業(yè)服務(wù)。
MySQL經(jīng)常用自定義變量實(shí)現(xiàn)復(fù)雜查詢,比如row_number按組加行號的功能等.
但是這里面存在一個天坑.不可謂不深
先看試驗(yàn)
create table tmp_num( gid int, score int); create table tmp_var( gid varchar(32), score int); insert into tmp_num select id%4, ceil(1000*rand()) from nums where id<=20; insert into tmp_var select concat('組',gid),score from tmp_num;
兩個表, 只是分組的類型不一樣,一個分組是 字符串,另外一個是整形.
首先查詢分組是整形的情況
select t1.gid,t1.score, case when @gid=gid then @rn:=@rn+1 when @gid:=gid then @rn:=1 else @rn:=1 end rn from ( select * from tmp_num ,(select @gid:=0,@rn:=0) vars order by gid,score ) t1;
如果其他的程序使用 該自定義變量查詢字符串分組的情況,則會出現(xiàn)bug
select t1.gid,t1.score, case when @gid=gid then @rn:=@rn+1 when @gid:=gid then @rn:=1 else @rn:=1 end rn from ( select * from tmp_var ,(select @gid:='',@rn:=0) vars order by gid,score ) t1;
在多個項(xiàng)目共用連接池的情況下,萬一出現(xiàn)這種情況,極難排查
等排查出來,生產(chǎn)環(huán)境的錯誤都不知道持續(xù)多少天了,
那時候就尷尬了,錯誤排除了,人也被開除了
所以還是 58處理的方式比較好,一刀切的禁用自定義變量
看完了這篇文章,相信你對“MySQL自定義變量實(shí)現(xiàn)row_number分析函數(shù)的問題示例”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
分享題目:MySQL自定義變量實(shí)現(xiàn)row_number分析函數(shù)的問題示例
網(wǎng)頁鏈接:http://www.dlmjj.cn/article/ggdshg.html