mysql存储过程、函数、触发器、

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
当数据库版本不允许直接使用存储过程、函数的语法时用delimiter // 将结束符改成//用完之后再写delimiter;将结束符改回来即可,调用过程、函数用call+其名字即可返回结果
 
 
 
 
 
 
delimiter //
不带参数过程
CREATE PROCEDURE proc ()
BEGIN
    SELECT * FROM city where type=1;
end//
 
调用:call proc;
 
带参数过程
CREATE PROCEDURE countcity1(IN count int, OUT num INT)
BEGIN
    SELECT COUNT(*)  FROM city WHERE type=count;
END //
 
调用 call countcity1(1,@num);
     select @num
 
函数
CREATE FUNCTION NameByZip() RETURNS CHAR(50)
RETURN (select * from city where cityname = '上海');
 
设置变量
DECLARE var1 INT DEFAULT 100;
DECLARE var2, var3, var4 INT;
SET var2 = 10, var3 = 20;
SET var4 = var2 + var3;
 
设置游标
DECLARE cursor_name CURSOR FOR select_statement ;   select_statement指的是返回的结果集
打开游标 OPEN cursor_name{游标名称}
使用游标 FETCH cursor_name INTO var_name [, var_name] ... {参数名称}
关闭游标 CLOSE cursor_name{游标名称}
例子
DECLARE t_studentName CHAR(20);
DECLARE t_studentAge INT;
DECLARE cur_student CURSOR FOR SELECT studentName, studentId FROM student where studentName = 'Bruce';
OPEN cur_student;
FETCH cur_student INTO t_studentName, t_studentAge;
...
CLOSE cur_student;
 
IF
IF t_studentName IS NULL
    THEN SELECT studentName INTO t_studentName FROM student where studentName = 'Bruce';
    ELSE UPDATE studentName set student = NULL where studentName = 'Bruce';
END IF;
 
删除
DROP PROCEDURE CountStudent
DROP FUNCTION NameByZip;
 
创建触发器
CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
1、trigger_name标识触发器名称,用户自行指定
2、trigger_time标识触发时机,可以指定为before或after
3、trigger_event标识触发事件,包括INSERTUPDATEDELETE
4、tbl_name标识建立触发器的表名,即在哪张表上建立触发器
5、trigger_stmt是触发器程序体,触发器程序可以使用beginend作为开始和结束,中间包含多条语句
触发器例子:mysql> create trigger update_Student BEFORE update on student FOR EACH ROW
                ->begin
                -> update board1 set articleCount=articleCount+1 where id= NEW.bid;
                -> end; 触发器不允许返回结果、mysql的触发器目前不能对当前表进行操作
 
查看触发器
SHOW TRIGGERS
删除触发器
DROP TRIGGER name
 
===========================================================
WHERE  DATEDIFF(NOW(),reward_time)=0 可以得到当天时间
WHERE  DATEDIFF(NOW(),reward_time)=2 可以得到前天时间 原理:参数1与参数二的值的差就是相隔的天数
where DATEDIFF(NOW(),reward_time)<3 and DATEDIFF(NOW(),reward_time)>0 可求出前三天的总数据结果
 
 
UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。
union all则是返回所有结果
例子:select *
from student
where id < 4
union
select *
from student
where id > 2 and id < 6

  

posted @   黑魔法os  阅读(845)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示