使用MySQL編程和SQL Server基本思想是一致的,語法有較大的區(qū)別。SQL Server不管是條件、循環(huán)等區(qū)塊仍然要使用begin與end作為起始和結束的標識,而MySQL則直接用END something(如while,if,loop),當然,由于自己接觸MySQL并不長,沒有使用SQL Server那么熟練,所以寫這些也是非?;A的部分,而在實際問題中會千變萬化,所以還是需要更多的實踐來不斷提高。
專注于為中小企業(yè)提供網站制作、網站建設服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)雷山免費做網站提供優(yōu)質的服務。我們立足成都,凝聚了一批互聯(lián)網行業(yè)人才,有力地推動了近千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網站建設實現(xiàn)規(guī)模擴充和轉變。
創(chuàng)建存儲過程
mysql delimiter $ -- delimiter $是設置 $為命令終止符號,代替默認的分號,因為分號有其他用處.
mysql create procedure sp_test(IN pi_id int, OUT po_name varchar(10))
- begin
- select * from test.tb_test;
- select tb_test.name into po_name from test.tb_test where tb_test.id = pi_id;
- end
- $
Query OK, 0 rows affected (0.00 sec)
mysql delimiter ; -- 恢復分號作為分隔終止符號
5.調用存儲過程
mysql set @po_name='';
Query OK, 0 rows affected (0.00 sec)
mysql call sp_test(1,@po_name);
1、函數(shù)必須指定返回值,且參數(shù)默認為IN類型。
2、存儲過程沒返回值,參數(shù)可以是 IN,OUT,IN OUT類型,有的人可能會理解成OUT 也算是返回值。
3、調用方式:函數(shù) select my_fun() ;過程 call my_pro( ) ;
4、DEMO
mysql call my_pro(1,2,@c);
Query OK, 0 rows affected (0.00 sec)
mysql select @c;
+------+
| @c |
+------+
| 3 |
+------+
1 row in set (0.00 sec)
mysql select my_fun(1,2);
+-------------+
| my_fun(1,2) |
+-------------+
| 3 |
+-------------+
1 row in set (0.00 sec)
1、delimiter // ,聲明分隔符:DELIMITER是分割符的意思,因為MySQL默認以";"為分隔符,如果我們沒有聲明分割符,那么編譯器會把存儲過程當成SQL語句進行處理,則存儲過程的編譯過程會報錯,所以要事先用DELIMITER關鍵字申明當前段分隔符,這樣MySQL才會將";"當做存儲過程中的代碼,不會執(zhí)行這些代碼(這里如果不懂的話,你可以通過試錯的方法來理解)。
2、編寫存儲過程的格式:CREATE PROCEDURE([[IN |OUT |INOUT ]參數(shù)名數(shù)據類形...])
例子:
1)create procedure proc1(out s int) // 只有輸出
2)create procedure proc2(in p_in bigint) // 只有輸入
3)create procedure proc15() // 沒有輸入與輸出
4)create procedure demo_multi_param(in id bigint,in name varchar(32),out c int) //多輸入與輸出
3、過程體的開始與結束使用BEGIN與END進行標識。
4、select count (*) into s from student; // 過程體,一系列的邏輯語句,sql語句
5、delimiter ; 用完了之后要把分隔符還原。