mysql中的觸發器以及存儲過程的基礎瞭解

mysql中的觸發器以及存儲過程的基礎瞭解

 

觸發器的基礎瞭解:

 

01

觸發器(trigger):一觸即發,就是當進行某種操作之後(或者之前),附加的一種操作就馬上執行。

02

作用:監視某種情況並觸發某種操作;

03

註意事項:

04

能監視的事件:增,刪,改;能觸發的事件:增,刪,改;

05

 

06

監視地點:table

07

監視事件:insert/update/delete

08

觸發時間:after/before

09

觸發事件:insert/update/delete

10

 

11

#建立商品表:

12  www.aiwalls.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.aiwalls.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.aiwalls.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.aiwalls.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.aiwalls.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.aiwalls.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.aiwalls.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$

 

 

作者 莊偉鴻

發佈留言