自己网站的关键词怎么改,网站建设价格正规,报价单模板,晋城网站建设开发25.1 触发器
触发器适用于MySQL 5及以后的版本 某条语句#xff08;某些语句#xff09;在事件发生时自动执行#xff08;在某个表发生改变时自动处理#xff09; 触发器是MySQL响应以下任意语句而自动执行的一条MySQL语句#xff08;或位于BEGIN和END语句之间的一组语气…25.1 触发器
触发器适用于MySQL 5及以后的版本 某条语句某些语句在事件发生时自动执行在某个表发生改变时自动处理 触发器是MySQL响应以下任意语句而自动执行的一条MySQL语句或位于BEGIN和END语句之间的一组语气
DELETEINSERTUPDATE
其他MySQL语句不支持触发器
25.2 创建触发器
创建触发器时需要给出4条信息
唯一的触发器名必须在每个表中唯一最好在数据库范围内使用唯一的触发器名触发器关联的表触发器应该响应的活动DELETE、INSERT、UPDATE触发器何时执行处理之前或之后
触发器由CREATE TRIGGER语句创建
CREATE TRIGGER newproduct AFTER INSERT ON products
FOR EACH ROW SELECT Product added;FOR EACH ROW代码对每个插入行执行 文本 Product added’将对每个插入的行显示一次
只有表才支持触发器视图不支持临时表也不支持 触发器按每个表每个事件每次地定义每个表每个事件每次只允许一个触发器。每个表最多支持6个触发器每条INSERT、UPDATE和DELETE的之前和之后。单一触发器不能与多个事件或多个表关联所以如果你需要一个对INSERT和UPDATE操作执行的触发器则应该定义两个触发器。
如果BEFORE触发器失败则MySQL不执行请求的操作。如果BEFORE触发器或语句本身失败MySQL将不执行AFTER触发器如果有的话。
25.3 删除触发器
DROP TRIGGER newproduct;触发器不能更新或覆盖。为了修改一个触发器必须先删除它然后再重新创建。
25.4 使用触发器
25.4.1 INSERT触发器
INSERT触发器在INSERT语句执行之前或之后执行。
在INSERT触发器代码内可引用一个名为NEW的虚拟表访问插入的行。在BEFORE INSERT触发器中NEW中的值也可以被更新允许更改被插入的值对于AUTO_INCREMENT列NEW在INSERT执行之前包含0在INSERT执行之后包含新的自动生成值。
对于orders的每次插入使用这个触发器将总是返回新的订单号。
CREATE TRIGGER neworder AFTER INSERT ON orders
FOR EACH ROW SELECT NEW.order_num;测试触发器
INSERT INTO orders(order_date,cust_id)
VALUES(Now(),10001);通常将BEFORE用于数据验证和净化。
25.4.2 DELETE触发器
在DELETE触发器代码内可以引用一个名为OLD的虚拟表访问被删除的行OLD中的值只能读不能更新
使用OLD保存将要删除的行到一个存档表中
CREATE TRIGGER deleteorder BEFORE DELETE ON orders
FOR EACH ROW
BEGININSERT INTO archive_orders(order_num,order_date,cust_id)VALUES(OLD.order_num,OLD.order_date,OLD.cust_id);
END;使用BEFORE DELETE 触发器的优点如果由于某种原因订单不能存档DELETE本身将被放弃。 多语句触发器使用BEGIN END的好处是触发器能容纳多条SQL语句
25.4.3 UPDATE触发器
在UPDATE触发器代码中你可以引用一个名为OLD的虚拟表访问以前UPDATE语句前的值引用一个名为NEW的虚拟表访问新更新的值在BEFORE UPDATE触发器中NEW中的值可能也被更新允许更改将要用于UPDATE语句中的值OLD中的值全都是只读的不可更新。
保证州名缩写总是大写不管UPDATE语句中给出的是大写还是小写
CREATE TRIGGER updatevendor BEFORE UPDATE ON vendors
FOR EACH ROW SET NEW.vend_stateUpper(NEW.vend_state);25.4.4 关于触发器的进一步介绍
与其他DBMS相比MySQL 5支持的触发器相当初级创建触发器可能需要特殊的安全访问权限但是触发器的执行是自动的。应该用触发器来保证数据的一致性大小写、格式等创建审计跟踪。使用触发器把更改如果需要甚至还有之前和之后的状态记录到另一个表非常容易。MySQL触发器不支持CALL语句不能从触发器内调用存储过程。所需的存储过程代码需要复制到触发器内。