儲存過程WHERE條件不生效

2022-01-12 14:15:58 字數 1354 閱讀 2008

業務上有個刪除操作需要涉及到幾張表,一條一條操作很麻煩,所以想寫個儲存過程來封裝下,原始語句如下:

delete from auth_authority where `id` in ('f_view_access');

delete from auth_role_authority where authority_id in ('f_view_access');

儲存過程如下:

drop procedure if exists delete_authority;

delimiter $$

create procedure delete_authority(in authority_id char(30))

begin

delete from auth_authority where `id` = authority_id;

delete from auth_role_authority where `authority_id` = authority_id;

end $$

delimiter ;

call delete_authority('f_view_access');

drop procedure if exists delete_authority;

執行後發現auth_role_authority表的資料全部被刪除了,即where條件不生效

經過排查確認是變數(authority_id)命名的問題,總結起來就是:儲存過程delete語句中where條件後的變數名不能和欄位名相同,不區分大小寫的!其他select、update、insert同理,坑爹。。。

修改變數名後的儲存過程如下,執行符合預期:

drop procedure if exists delete_authority;

delimiter $$

create procedure delete_authority(in authority char(30))

begin

delete from auth_authority where `id` = authority;

delete from auth_role_authority where `authority_id` = authority;

end $$

delimiter ;

call delete_authority('f_view_access');

drop procedure if exists delete_authority;

where 條件為空時不走where條件

mysql 若想當where 條件為空時不走where條件,where可以整個為空,但裡面的如where is status sta tus 的 status 的 status 的status不能為空,不然會查詢出status為空的資料,記錄一下。where sta demandstatus if ...

mysql 儲存過程 分頁 傳入where

名稱 mysql版查詢分頁儲存過程 by peace 2013 8 14 輸入引數 fields 要查詢的字段用逗號隔開 輸入引數 tables 要查詢的表 輸入引數 where 查詢條件 輸入引數 orderby 排序字段 輸出引數 page 當前頁計數從1開始 輸出引數 pagesize 每頁大...

儲存過程條件查詢

前幾天寫查詢,簡單的sql又滿足不了,只能寫在儲存過程裡面,先把資料放在臨時表裡面,然後在給臨時表拼接條件進行查詢,最後執行,注意這裡執行的內容是最關鍵的。如下 set ls select from tmps where 1 1 這是現將臨時表賦給引數,拼接上1 1 方便下面 繼續拼接and條件 i...