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), pass
word 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$
作者 庄伟鸿