游标
游标cursor是一个存储在MySQL服务器上的数据库查询。
它不是一条SELECT语句,而是被该语句检索出来的结果集,在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。
MySQL游标只能用于存储过程(函数)。
使用游标的步骤:
-
在使用游标之前,必须先声明它。
-
声明之后,必须打开游标以供使用
-
对于填有数据的游标,根据需要取出各行
-
在结束游标使用时,必须关闭游标
CREATE PROCEDURE processorders() BEGIN DECLARE order numbers CURSOR FOR SELECT order_num FROM orders; END;
存储过程处理完成后,游标就消失。因为它局限于存储过程。
打开游标:OPEN order_numbers;
关闭游标:CLOSE order_numbers;
CLOSE释放游标使用的所有内部内存和资源,因此在每个游标不再需要时都应关闭。
使用声明过的游标不需要再次声明,用OPEN语句打开就可以了。
在一个游标被打开后,可以使用FETCH语句分别访问它的每一行,FETCH指定检索什么数据。
CREATE PROCEDURE processorder()
BEGIN
DECLARE 0 INT;
DECLARE ordernumber CURSOR
FOR
SELECT order_num FROM orders;
OPEN ordernumbers;
FETCH ordernumbers INTO 0;
CLOSE ordernumbers;
END;
FETCH自动从第一行开始检索当前行的order_num列到一个名为0的局部变量中。
FETCH语句支持循环语句,它可用来重复执行代码,直到使哟个LEAVE语句子句手动退出为止。
触发器
当需要在某个表发生更改时自动执行的MySQL语句。
只有表才支持触发器,视图不支持,临时表也不支持。
触发器按每个表每个事件每次地定义,每个表每个事件每次只允许一个触发器,因此,每个表最多支持6个触发器。单一触发器不能与多个事件或多个表关联。
CREATE TRIGGER newproduct
AFTER INSERT ON products
FOR EACH ROW SELECT ‘product added’;
这里创建了一个newproduct的触发器,触发器可在一个操作发生之前或之后执行,这个触发器哈指定FOR EACH ROW,因此代码对每个插入行执行显示一次‘product added’.
删除触发器:DROP TRIGGER newproducts;