存储过程参数
类型 in out inout
IN 输入参数: 表示该参数的值必须在调用存储过程时指定值, 在存储过程中修改该参数的值不能被返回, 为默认值。
OUT 输出参数: 该值可在存储过程内部被改变, 并可返回。
INOUT输入输出参数: 调用时指定值, 并且可被改变和返回。
存储过程条件语句
if 条件判断 then
语句(true时)
else
语句(false时)
end if;
存储过程多条件判断语句
IF expression THEN
statements;
ELSEIF elseif-expression THEN
elseif-statements;
…
ELSE
else-statements;
END IF;
存储过程CASE语句
CASE grade
WHEN 'A' THEN
SET result = '成绩A等' ;
WHEN 'B' THEN
SET result = '成绩B等' ;
WHEN 'C' THEN
SET result = '成绩C等' ;
WHEN 'D' THEN
SET result = '成绩D等' ;
ELSE
SET result = '输入数据错误' ;
END CASE ;
例:查询news表中新闻信息。
CREATE PROCEDURE sp13_2()
BEGIN
SELECT newsId AS 编号,
CASE
WHEN topicId=1 THEN '热点新闻'
WHEN topicId=2 THEN '娱乐新闻'
WHEN topicId=3 THEN '经济新闻'
WHEN topicId=4 THEN '体育新闻'
ELSE '其他新闻'
END AS 新闻 ,
newsTitle 新闻标题, newsAuthor 新闻作者
FROM news;
END
存储过程循环语句
WHILE循环:
WHILE expression DO
Statements
END WHILE
REPEAT循环:
REPEAT
statements;
UNTIL expression
END REPEAT
while循环和repeat循环的区别
1、while是满足条件才执行循环,repeat是满足条件退出循环
2、while在首次循环执行之前就判断条件,最少执行0次,repeat是在首次执 行循环之后才判断条件,循环至少执行一次。
LOOP循环:
LOOP_NAME:LOOP
statements
END LOOP
中断循环:
LEAVE:停止循环,跳出循环体
ITERATE :中断当前循环,继续后续循环
例:计算1-10间数的和
CREATE PROCEDURE sp15()
BEGIN
DECLARE sums INT DEFAULT 0 ;
DECLARE i INT DEFAULT 1 ;
loop_label: LOOP
IF i <= 10 THEN
SET sums = sums + i;
ELSE
LEAVE loop_label ;
END IF ;
SET i = i + 1 ;
END LOOP;
SELECT sums AS '和' ;
END;
触发器
CREATE TRIGGER <trigger_name> BEFORE|AFTER
INSERT|UPDATE|DELETE ON <table_name> FOR EACH ROW
BEGIN
SQL语句;
END
触发器创建语法四要素:
监视地点:TABLE
监视事件:INSERT , UPDATE , DELETE
触发时间:AFTER , BEFORE
触发事件:SQL语句
OLD、NEW关键字
1.当向表插入新记录时,在触发程序中可以使用NEW关键字表示新记录,
当需要访问新记录的某个字段值时,可以使用“NEW.字段名”的方式访问
2.当从表中删除某条旧记录时,在触发程序中可以使用OLD关键字表示旧记录,
当需要访问旧记录的某个字段值时,可以使用“OLD.字段名”的方式访问。
使用SHOW TRIGERS 命令查看触发器的定义
使用SHOW CREATE TRIGGER 触发器名称 查询指定名触发器的定义
查询触发器
SELECT * FROM INFORMATION_SCHEMA.TRIGGERS;
删除触发器
DROP TRIGGER 触发器名称