MySQL 儲存過程傳參的乙個坑

2021-09-24 19:55:18 字數 643 閱讀 7075

例如乙個儲存過程:

delimiter //

create procedure read_score(in id int)

begin

select * from score where id=id;

end;

//delimiter ;

在這種情況下,無論我傳入id是什麼值,這個儲存過程都會返回score的所有資料。

原因是當傳入引數的名字跟欄位名字相等的時候,那麼引數名字就不會替換成實際引數,上述例子的sql也就是始終是執行sqlselect * from score where id=id;,因為id=id恒為真,所以實際等效於select * from score

對於查詢還好,萬一sql是delete from score where id=id呢?所以需要特別注意,解決方法就是形式引數要跟表字段區分開來,例如

create procedure read_score(in prd_id int)

begin

select * from score where id=prd_id;

end;

//

MySql建立乙個儲存過程

mysql 儲存過程是從 mysql 5.0 新功能。儲存過程的長處有一籮筐。只是最基本的還是執行效率和sql 封裝。特別是 sql 封裝功能,假設沒有儲存過程,在外部程式訪問資料庫時 比如 php 要組織非常多 sql 語句。特別是業務邏輯複雜的時候,一大堆的 sql 和條件夾雜在 php 中,讓...

mysql儲存過程之乙個簡單的儲存過程(一)

宣告分隔符 delimiter 建立儲存過程 create procedure 儲存過程名稱 引數列表 開始執行儲存過程 begin 儲存過程的邏輯 select from user 結束儲存過程 end 分隔符 重置分隔符 delimiter 案例如下 delimiter create proce...

mysql儲存過程之乙個簡單的儲存過程

1.客戶端建立乙個儲存過程 2.填寫儲存過程內容 delimiter drop procedure if exists insert corp create definer procedure insert corp language sql not deterministic sql securi...