游标是一个存储在MySQL服务器器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。游标主要用于交互应用,其中用户需要滚动屏幕上的数据,并对数据进行浏览或做出更改。MySQL的有表只能用于存储过程。
使用游标涉及明确的几个步骤:
(1)在能够使用游标前,必须声明它。这个过程实际上没有检索数据,它只是定义要使用的SELECT语句。
(2)一旦声明后,必须打开游标以供使用。这个过程用前面定义的SELECT语句吧数据实际检索出来。
(3)对于填有数据的游标,根据需要取出各行。
(4)在结束游标使用时,关闭游标。
在声明游标后,可根据需要频繁地打开和关闭游标。在游标打开后,可根据需要频繁地执行取操作。
游标用DECLARE语句创建。DECLARE命名游标,并定义相应的SELECT语句,根据需要带WHERE和其他字句。
游标用OPEN CURSOR语句来打开;游标处理完成后,应当使用CLOSE语句关闭游标;
在一个游标被打开后,可以使用FETCH语句分别访问它的每一行。FETCH指定检索什么数据,检索出来的数据存储在什么地方。它还向前移动游标中的内部行指针,是下一条FETCH语句检索下一行。
触发器是MySQL相应以下任意语句(DELECT、INSERT、UPDATE)而自动执行的一条MySQL语句。
在创建触发器时,需要给出4条信息:(1)唯一的触发器名;(2)触发器关联的表;(3)触发器应该相应的活动;(4)触发器何时执行。
在MySQL5中,触发器名必须在每个表中唯一,但不是每个数据库中唯一。这表示同一数据库中的两个表可具有相同名字的触发器。这在其他每个数据库触发器名必须是唯一的DBMS中是不允许的,而且MySQL5以后的版本可能会使命名规则更为严格。因此,现在最好是在数据库范围内使用唯一的触发器名。
触发器用CREATE TRIGGER语句创建。
只有表才支持触发器,视图不支持。
触发器按每个表每个事件地定义,每个表每个事件每次只允许一个触发器。因此,每个表最多支持6个触发器(每条INSERT、UPDATE和DELECT的之前和之后)。单一触发器不能与多个事件或多个表关联,所以,如果你需要一个对INSTER和UPDATE操作执行的触发器,则应该定义两个触发器。如果BEFORE触发器失败,则MySQL将不执行请求操作。此外,如果BEFORE触发器或语句本身失败。MySQL将不执行AFTER触发器。
删除触发器可以利用DROP TRIGGER语句。
INSERT触发器
INSERT触发器在INSERT语句执行之前或折后执行。需要知道一下几点:
(1)在INSERT触发器代码内,可引用一个名为NEW的虚拟表,访问被插入的行;
(2)在BEFORE INSERT触发器中,NEW中的值也可以被更新;
(3)对于AUTO_INCREMENT列,NEW在INSERT执行之前包含0,在INSERT执行之后包含新的自动生成值。
DELECT触发器
DELECT触发器在DELECT语句执行之前或之后执行。需要知道一下两点:
(1)在DELECT触发器代码内,你可以引用名为OLD的虚拟表,访问被删除的行;
(2)OLD中的值都是只读的,不能更新。
UPDATE触发器
UPDATE触发器在UPDATE语句执行之前或之后执行。需要知道一下几点:
(1)在UPDATE触发器代码中,你可以引用一个名为OLD的虚拟表访问以前的值,引用一个名为NEW的虚拟表访问新更新的值;
(2)在BEFORE UPDATE触发器中,NEW中的值可能也被更新;
(3)OLD中的值都是只读的,不能更新。