灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2800回复:0

[mysql]mysql中的触发器以及存储过程的基础了解

楼主#
更多 发布于:2012-09-01 02:20

mysql中的触发器以及存储过程的基础了解

触发器的基础了解:

01
触发器(trigger):一触即发,就是当进行某种操作之后(或者之前),附加的一种操作就马上执行。
02
作用:监视某种情况并触发某种操作;
03
注意事项:
04
能监视的事件:增,删,改;能触发的事件:增,删,改;
05

06
监视地点:table
07
监视事件:insert/update/delete
08
触发时间:after/before
09
触发事件:insert/update/delete
10

11
#建立商品表:
12  www.atcpu.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.atcpu.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.atcpu.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.atcpu.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.atcpu.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.atcpu.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.atcpu.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$


作者 庄伟鸿

喜欢0 评分0
游客

返回顶部