mysql中的觸發器以及存儲過程的基礎了解 觸發器的基礎了解: 01 觸發器(trigger):一觸即發,就是當進行某種操作之後(或者之前),附加的一種操作就馬上執行。 02 作用:監視某種情況並觸發某種操作; 03 注意事項: 04 能監視的事件:增,刪,改;能觸發的事件:增,刪,改; 05 06 監視地點:table 07 監視事件:insert/update/delete 08 觸發 09 觸發事件:insert/update/delete 10 11 #建立商品表: 12 www.2cto.com create table goods(goodsId int, name varchar(10), num int)charset utf8$ 13 14 #建立訂單表: 15 create table orders(ordersId int, goodsId int, num int)charset utf8$ 16 17 #插入數據 18 insert into goods values(1,'豬',22),(2,'羊',19),(3,'狗',12),(4,'貓',8)$ 19 20 #買三只羊 21 insert into orders values(1, 2, 3); 22 23 #減少羊的庫存 24 update goods set num = num -3 where goodsId = 2; 25 26 #開始學著使用觸發器 27 #監視地點:orders 28 #監視操作:insert 29 #觸發操作:update 30 #觸發時間:after 31 32 #創建第一個觸發器 33 create trigger t1 34 after insert on orders 35 for each row 36 begin 37 update goods set num = num -3 where goodsId = 2; 38 www.2cto.com end$ 39 40 #刪除觸發器 41 drop trigger t1$ 42 43 #創建第二個觸發器 44 create trigger t2 45 after insert on orders 46 for each row 47 begin 48 update goods set num = num - new.num where goodsId = new.goodsId; 49 end$ 50 51 #創建第三個觸發器 52 create trigger t3 53 after delete on orders 54 for each row 55 begin www.2cto.com 56 update goods set num = num + old.num where goodsId = old.goodsId; 57 end$ 58 59 #創建第四個觸發器 60 create trigger t4 61 after update on orders 62 for each row 63 begin 64 update goods set num = num + old.num - new.num where goodsId = old.goodsId; 65 end$ 存儲過程的基礎了解: 01 存儲過程的含義: 02 存儲過程類似於函數,就是把一段代碼封裝起來,當要執行這一段代碼的時候,可以通過調用該存儲過程來實現。在封裝的語句體裡面,可以使用if/else, case, while等控制結構。這裡面就有所謂的sql編程。 03 #測試表的建立及表的操作: 04 create table users( num int, name varchar(20), password varchar(20)); 05 www.2cto.com insert into users values(1,'zwh','zwh'); 06 insert into users values(2, 'lhy', 'lhy'); 07 insert into users values(3, 'test', 'test'); 08 insert into users values(4, 'test', 'test'); 09 insert into users values(5, 'test', 'test'); 10 insert into users values(6, 'test', 'test'); 11 insert into users values(7, 'test', 'test'); 12 insert into users values(8, 'test', 'test'); 13 insert into users values(9, 'test', 'test'); 14 insert into users values(10, 'test', 'test'); 15 www.2cto.com 16 #查看存在的存儲過程: 17 show procedure status; 18 19 #刪除存在的存儲過程: 20 drop procedure ***; 21 22 23 #這裡先把定界符先改為$: 24 delimiter $ 25 26 #建立第一個存儲過程:體驗一下"sql封裝" 27 create procedure p1() 28 begin 29 select * from users; 30 end$ 31 32 #調用存儲過程 33 call p1()$ 34 35 #建立第二個存儲過程:體驗一下"參數" 36 create procedure p2( n int ) 37 begin 38 select * from users where num < n; 39 end$ www.2cto.com 40 41 #建立第三個存儲過程:體驗一下"控制結構" 42 create procedure p3( n int, j char(1)) 43 begin 44 if j='h' then 45 select * from users where num>n; 46 else 47 select * from users where num<n; 48 end if; 49 end$ 50 51 #建立第四個存儲進程:體驗一下'循環結構';這裡要注意:存儲過程沒有返回值 52 #功能:計算從1到n的和 53 create procedure p4(n smallint) 54 begin 55 declare i int; 56 declare s int; 57 set i = 1; 58 www.2cto.com set s = 0; 59 while i <= n do 60 set s = s + i; 61 set i = i + 1; 62 end while; 63 select s; 64 end$ 作者 莊偉鴻