mysql存储过程 函数 触发器_mysql存储过程、函数、触发器、 黑魔法os

当数据库版本不允许直接使用存储过程、函数的语法时用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标识触发事件,包括INSERT、UPDATE和DELETE

4、tbl_name标识建立触发器的表名,即在哪张表上建立触发器

5、trigger_stmt是触发器程序体,触发器程序可以使用begin和end作为开始和结束,中间包含多条语句

触发器例子: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

你可能感兴趣的:(mysql存储过程,函数,触发器)