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