MySQL自定義變數實現row_number分析函式的天坑
MySQL經常用自定義變數實現複雜查詢,比如row_number按組加行號的功能等.
但是這裡面存在一個天坑.不可謂不深
先看試驗
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;
如果其他的程式使用 該自定義變數查詢字串分組的情況,則會出現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;
在多個專案共用連線池的情況下,萬一出現這種情況,極難排查
等排查出來,生產環境的錯誤都不知道持續多少天了,
那時候就尷尬了,錯誤排除了,人也被開除了
所以還是 58處理的方式比較好,一刀切的禁用自定義變數
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-2158074/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql使用自定義序列實現row_number功能MySql
- MySQL分析函式實現MySql函式
- MySQL全面瓦解18:自定義函式MySql函式
- 案例展示自定義C函式的實現過程函式
- MySQL使用之五_自定義函式和自定義過程MySql函式
- 13、MySQL Case-MySQL分析函式實現MySql函式
- mysql中自定義變數有哪些MySql變數
- MySQL自定義函式與儲存過程MySql函式儲存過程
- [譯] 為函式自定義屬性的八種實現方法函式
- tensorflow2 自定義損失函式使用的隱藏坑函式
- Oracle 自定義函式Oracle函式
- shell自定義函式函式
- Apache Phoenix自定義函式(UDF)實踐Apache函式
- 天獅集團雲函式實踐:自定義業務邏輯實現跨境電商全球直播函式
- Hive常用函式及自定義函式Hive函式
- MySQL中的ROW_NUMBER視窗函式簡單瞭解下MySql函式
- hive 3.0.0自定義函式Hive函式
- Hive中自定義函式Hive函式
- python教程:自定義函式Python函式
- Apache Linkis自定義變數實踐分享Apache變數
- MySQL排名函式實現MySql函式
- mixins,自定義指令,render函式(待研究填坑),過濾器函式過濾器
- java自定義equals函式和hashCode函式Java函式
- Mysql中儲存過程、儲存函式、自定義函式、變數、流程控制語句、游標/遊標、定義條件和處理程式的使用示例MySql儲存過程儲存函式變數
- 關於變數的宣告和定義、內部函式和外部函式變數函式
- PHP 自定義函式用法及常用函式集合PHP函式
- Nginx 如何自定義變數?Nginx變數
- CSS變數(自定義屬性)實踐指南CSS變數
- Hive函式(內建函式+自定義標準函式UDF)Hive函式
- Laravel 新增自定義助手函式Laravel函式
- laravel 自定義全域性函式Laravel函式
- Laravel 自定義函式存放位置Laravel函式
- Laravel自定義輔助函式Laravel函式
- FlinkSQL自定義函式開發SQL函式
- 深入mysql建立自定義函式與儲存過程的詳解MySql函式儲存過程
- HIVE自定義函式的擴充套件Hive函式套件
- Hive--->建立自定義的UDTF函式Hive函式
- 變數(函式)命名最佳實踐變數函式