存儲過程和函數:
類似scala中的方法
什麼是方法?
1.就是完成特定功能的 一組 語句
那你寫代碼寫方法的好處是什麼?
1.提高代碼重用性
2.簡化操作
存儲過程
就是 :
1.一組預先編譯好的sql語句的集合
使用:
1.提高效率:
1.體現在 你寫好了存儲過程 a
a:sql1、sql2、sql3 編譯好之後
調用 a ,就可以直接使用了
如果再次使用 就不用編譯了 提高效率
注意:不寫存儲過程的話
1. 三條 sql 你要連接 三次 數據庫
2.寫存儲過程 裏面包含 3條sql 就連接1次數據庫
好處:
1.減少編譯次數
2.減少連接數據庫連接次數
語法
1.創建語法
理解:
create procedure 存儲過程名字(參數列表){
方法體
}
實際:
create procedure 存儲過程名字(參數列表)
Begin
存儲過程體(一組合法的SQL語句)
end
注意:
1.參數列表: 三個部分
1.參數模式 參數名 參數類型
eg:
IN stuname varchar(20)
1.參數模式 !!:
1.IN 進 :該參數可以作爲輸入
1.需要調用方 傳入值
2.OUt 出 :該參數可以作爲輸出
1.該參數 是作爲 返回值
3.INOUT 進出 :該參數 即可以作爲 輸入輸出
1.即需要傳入值
2.又可以返回值
2.存儲過程體
1.裏面有多條語句的時候
1.每條sql 結尾要求加分號
2.存儲過程的結尾使用 delimiter (重新設置的意思)
delimiter 結束標誌
eg:
delimiter $
2.調用語法
call 存儲過程的名字(實參列表);
案例
1.空參列表
eg:插入到 admin表中5條記錄
--空參 插入到 admin表中3條記錄
delimiter $
create procedure myp1()
BEGIN
insert into admin (name,passwd) values('sx1','000'),('sx2','222'),('sx3','33');
END $
測試:
mysql> delimiter $
mysql> create procedure myp1()
-> BEGIN
-> insert into admin (name,passwd) values('sx1','000'),('sx2','222'),('sx3','33');
-> END $
Query OK, 0 rows affected (0.01 sec)
mysql>
1.原本表 :兩條數據
調用:
--調用
call myp1()$
創建:
mysql> delimiter $
mysql> create procedure myp1()
-> BEGIN
-> insert into admin (name,passwd) values('sx1','000'),('sx2','222'),('sx3','33');
-> END $
Query OK, 0 rows affected (0.01 sec)
調用:
mysql> call myp1()$
Query OK, 3 rows affected (0.00 sec)
mysql>
查看結果:
mysql> select * from admin;
-> $
+----+------+--------+
| id | name | passwd |
+----+------+--------+
| 3 | ww | 11%^ |
| 4 | xx | 33%^ |
| 5 | sx1 | 000 |
| 6 | sx2 | 222 |
| 7 | sx3 | 33 |
+----+------+--------+
5 rows in set (0.00 sec)
mysql>
注意:
查詢的時候 也要加 $
2.創建 in 模式參數的存儲 過程
後續。。。。