MySQL--存儲過程

定義 一個複雜邏輯對SQL語句的批量處理, 通過一個名字存儲 創建 delimiter // 修改終止符 -- 存儲過程沒有返回值 delimiter //    ---- 把終止符;修改成// create procedure porc2() begin -- 可執行語句 insert into mm_users values (0,'xiaownag','xxx'); select * from mm_users; end //       ---- 填寫終止符 delimiter ;   ---- 還原原來的終止符以執行 查看 -- 查看 mysql.proc    select db,name,type from mysql.proc; 調用 -- 調用 如果存儲過程沒有參數 小括號可以省略 call proc(); --在pymysql中執行存儲過程     cursor.callproc('存儲對象名') 刪除 -- 刪除 drop procedure proc_stu; delete from mysql.proc where name = 'porc1'; - 存儲過程和函數的區別 - 課件 -- 函數在使用時候有哪些限制  -- select 語句不能夠在函數中執行  -- 函數中除 select into之外其他的 select 語句都不能夠執行  -- select into 是將查詢的結果賦值給某一個變量  delimiter //  create function f4(in a int,in b int) returns int  begin  -- 定義一個變量 res  declare res int default 0;  -- 將 a + b的結果賦值給 res  select count(*) from mm_users into res;  -- set res = a + b;  -- 返回 res  return res;  end  //  delimiter ;  -- 通過存儲過程來實現函數中不能夠調用 select 語句的弊端  -- 但是存儲過程沒有返回值  -- 可以通過 out 類型的參數來給存儲過程實現多個返回值的功能 - 相同點 相同點 存儲過程和函數都是爲了可重複的執行操作數據庫的 sql 語句的集合. 存儲過程和函數都是一次編譯,就會被緩存起來, 下次使用就直接命中緩存中已經編譯好的 sql, 不需要重複編譯 減少網絡交互,減少網絡訪問流量 - 不同點 不同點 標識符不同,函數的標識符是 function, 過程:procedure 函數中有返回值,且必須有返回值,而過程沒有返回值, 但是可以通過設置參數類型(in,out)來實現多個參數或者返回值 函數使用 select 調用,存儲過程需要使用 call 調用 select 語句可以在存儲過中調用, 但是除了 select ... into 之外的 select 語句都不能再函數中調用 通過 in out 參數,過程相關函數更加靈活,可以返回多個結果 在實際開發中根據個人喜好選擇使用函數或者存儲過程 - 參數/返回值 -- 參數的類型 -- in 傳入類型的參數,函數或者存儲過程的參數 默認就是傳入類型的參數 -- out 傳出類型的參數, 給存儲過程實現多個返回值的功能 -- inout  既可以傳入又可以傳出 一般不用 一個參數要表達多個意思, 造成參數的語義不夠清晰 函數的參數的最大個數: 1024 procedure p1(     in arg1 int,   # 讓存儲過程內部使用     out arg2 varchar(50)     inout arg3 int ) begin     ... end @i1 = "alex" # @il 引用 call p1(1, @i1, @i2)  # @設置一個變量@i1= null
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章