一. 編程基礎
1) 結束符
2) 代碼塊
Begin 相當於 {
end; 相當於 }
1. 變量
系統變量
Show variables;
查看系統變量sql_mode
1 會話變量 2 Set @變量名=值;
局部變量 // 在函數或過程內部定義的變量
1 Declare 變量名 類型 default 默認值; 2 3 Declare I int default 0;
2. 循環while
1 變量初始化; 2 3 [名稱]:While 條件判斷 do 4 5 循環體; 6 7 增量; 8 9 End 空格 while;
delimiter // create function mywhile(n int) returns int begin declare i int default 0; declare sum int default 0; while i <= n do set sum = sum + i; set i = i +1; end while; return sum; end; // delimiter ;
調用函數:
1 select mywhile(100);
3. 判斷if
If 條件 then return 返回值; Elseif 條件 then return 返回值; Else return 返回值; End if;
delimiter // create function checkuser(name varchar(11)) returns varchar(11) begin if name = 'admin' then return "ok"; else return "no"; end if; end; // delimiter ;
二.自定義[存儲]函數
1) 創建自定義函數
Create Function 名稱(參數 數據類型) returns 數據類型 說明: create function 關鍵字 名稱 //自定義函數名稱,用來調用. ([參數 數據類型]) //形參為可選 Returns 數據類型 //指明返回值的類型, 注意:returns 注意:自定義函數體中必須有返回值 使用關鍵字return 沒有參數的:
delimiter // create function test() returns varchar(11) begin return 'ok'; end; // delimiter ;
2) 調用函數
Select 函數名稱([參數]);
說明: select 函數名稱([參數]) // 根據定義函數時形參. ,形參與實參保持一致.
3) 查看創建函數信息
show create function 函數名稱 \G
4) 查看所有自定義函數
1 show function status \G
5) 刪除自定義函數
1 Drop function 函數名稱;
如果當前數據庫不是db_five
Drop function db_five.mywhile;
自定義函數中可以執行的SQL語句: delete, update,insert
三.存儲過程
概念: 存儲過程就是一條或多條SQL語句的集合.即沒有返回值的存儲函數
delimiter // create procedure myselect() begin select * from student; end; // delimiter ;
1. 定義存儲過程
Create procedure 過程名稱(in 參數 類型,out 參數 類型 inout 參數 類型)
說明:
1) Create procedure // 創建過程關鍵字
2) In 參數 數據類型 (默認) //類似於php中的拷貝傳值
3) Out 參數 數據類型 //類似於php中的引用傳值, 傳遞到過程中將這個變量賦值為NULL;
4) Inout 參數 數據類型 //類似於php中的引用傳值;
delimiter // create procedure mytest(in a int, out b int,inout c int) begin select a,b,c; set a=11,b=22,c=33; select a,b,c; end; // delimiter ;
2. 調用存儲過程
Call 過程名稱( [參數])
3. 查看創建存儲過程信息
Show create procedure 過程名稱
4. 查看所有存儲過程
Show procedure status \G
5. 刪除存儲過程
Drop procedure 過程名稱
四.觸發器
概念: 觸發器是由事件來觸發某個操作,這些事件包括INSERT、UPDATE和DELETE語句。當執行這些事件時,就會激活觸發器執行相應的操作。
1. 創建觸發器
create trigger 名稱 after|before 事件 insert|update|delete on 表名 for each row
說明:
1) Create trigger //創建觸發器的關鍵字
2) 名稱
3) After|before , 觸發時機
4) insert|update|delete //事件
5) on 表名 //作用於哪張表
6) for each row //觸發器是基於行.
nowtime //id,nowtime; nowuser //id,name 在用戶表中添加用戶時,通過觸發器會自動在nowtime表中將當前的時間添加 delimiter // create trigger tg1 after insert on nowuser for each row begin insert into nowtime values (null,now()); end; // delimiter ;
2. 兩個關鍵字: new, old
在觸發器中,當觸發事件發生時,
new : 代表新行, old: 代表舊行
insert 操作: 成功之后,其后會自動產生一行新的數據. 在觸發器中通過new獲取新行字段值
delete 操作, 其成功之后, 對舊行數據進行刪除,在觸發器中可以通過old獲取舊行字段值
update操作: 其會對原有的舊行,更新為新行. 既有新行又有舊行
insert 事件
delimiter // create trigger tg1 after insert on tb_order for each row begin update tb_goods set inv = inv - new.num where id = new.pid; end; // delimiter ;
Delete 事件:
-- delete delimiter // create trigger tg2 after delete on tb_order for each row BEGIN update tb_goods set inv = inv + old.num where id = old.pid; end; // delimiter ;
Update 事件:
New,old
delimiter // create trigger tg3 after update on tb_order for each row begin update tb_goods set inv = inv + old.num - new.num where id = old.pid; end; // delimiter ;
3. 顯示所有觸發器
Show triggers \G
4. 刪除觸發器
Drop trigger 觸發器名稱