怎麼查詢,怎樣寫sql
在sql 語句中判斷不能用 == ,要用 = 就行了 ,賦值 用 :=
函數 和 儲存過程的相同點 和不同點:
函數的創建:
函數只能在指定數據庫中用。 和存儲方法一樣
delimiter
createfunction函數名稱(參數列表)returns返回類型beginsql語句end
createfunction函數名稱(參數列表)returns返回類型beginsql語句end
delimiter ;
調用:
select 函數名(參數列表)
刪除函數:
drop function 函數名稱;
儲存過程的創建:
delimiter //
create procedure 存儲過程名稱(參數列表)
begin
sql語句
end
//
delimiter ;
調用時:
call 儲存過程名(); --沒有參數的話括號可以省去
刪除儲存過程:
drop procedure 存儲過程名稱;
相同點
提高了語法的執行效率
* 存儲過程和函數都是為了可重複的執行操作數據庫的 sql 語句的集合.
* 存儲過程和函數都是一次編譯,就會被緩存起來,下次使用就直接命中緩存中已經編譯好的 sql, 不需要重複編譯
* 減少網絡交互,減少網絡訪問流量
不同點
* 標識符不同,函數的標識符是 function, 過程:procedure
* 函數中有返回值,且必須有返回值,而過程沒有返回值,但是可以通過設置參數類型(in,out)來實現多個參數或者返回值
* 函數使用 select 調用,存儲過程需要使用 call 調用
* select 語句可以在存儲過中調用,但是除了 select ... into 之外的 select 語句都不能再函數中調用
* 通過 in out 參數,過程相關函數更加靈活,可以返回多個結果
* 在實際開發中根據個人喜好選擇使用函數或者存儲過程
查看
* 所有存儲過程和函數,都存儲在mysql數據庫下的proc表中
* 查看錶結構
desc mysql.proc\G;
* 主要字段說明:
*
* name表示名稱
* type表示類型,為存儲過程、函數
* body表示正文腳本
* db表示屬於的數據庫
* 查看python數據庫的所有存儲過程
select name,type,body from mysql.proc where db='python';
函數實例:
-- 輸出 0 ~ 100 間的偶數
-- 遞增某一個值
-- 判斷該值是否為偶數
-- 將偶數 拼接成一個字符串 最後返回
delimiter //
create function f3() returns varchar(300)
begin
declare i int default 0;
declare res varchar(300) default '';
-- 2. 通過 while 遞增 i
while i <= 100 do
-- 3. 判斷 i 是否是偶數
if i % 2 = 0 then
-- 4. 拼接偶數
set res = concat(res,' ',i);
end if;
-- 遞增 i
set i = i + 1;
end while;
-- 5. 返回 res
return res;
end
//
delimiter ;
儲存過程實例:
-- 傳入一個英雄的 id 刪除該英雄,並且返回剩下的英雄總人數
delimiter //
create procedure deleteherobyid_getcount(in hid int unsigned,out rescount int)
begin
delete from mm_users where id = hid;
select count(*) from mm_users into rescount;
end
//
delimiter ;
閱讀更多 Java程序猿鼓勵師 的文章