1.What
触发器是MySQL响应DELETE,INSERT,UPDATE语句前后而自动执行的一条MySQL语句
2.Why(使用情形)
增加一个订单对应库存-1
删除一行在后台存档中保存一个副本
增加用户信息电话号码,身份证号时检查信息的正确性
3.How
触发器需要的信息: 那张表的什么改动之后/之前应该做什么操作
- 唯一的触发器名 名称
- 触发器关联的表 地点
- 关联表出发什么动作执行 事件
- 关联表触发动作的时间 时间
注意:触发器,存储过程,游标都相对于sql是DDL.创建使用CREATE
语句:
创建
CREATE TRIGGER 触发器名 触发时间 触发事件 ON 关联的表
FOR EACH ROW触发后要执行的语句
2)每个表每个事件只支持一个触发器,每张表只支持6个触发器(增删改之前之后)
3)单一触发器不能与多个事件绑定 eg:增删触发的语句相同仍然不能一起定义只能分别定义两条
删除
DROP trigger 触发器名
使用
- INSERT触发器
1).在INSERT事件触发的代码中可引用一个名为NEW的变量访问新插入的一行(NEW.name类似对象访问属性)
2).BEFORE INSERT中通过NEW获取的值可以被更新 ,允许更改即将被插入的值
eg:
BEFORE --->数据验证和净化-->保证插入/更改的值确实是需要的数据
- DELETE触发器
1)DELETE触发器代码内可以引用一个名为OLD代表进行删除操作的这一行代码
2)删除操作要做备份数据时必须BEFORE DELETE,如果AFTER删除了不能备份
如果触发器触发的语句不止一条可使用BEGIN END包围
- UPDATE触发器
2)OLD为只读的,BEFORE UPDATE 中NEW可被更新
4.另
与其他DBMS相比,MySQL 5中支持的触发器相当初级。未来的MySQL版本中有一些改进和增强触发器支持的计划。
创建触发器可能需要特殊的安全访问权限,但是,触发器的执行是自动的。如果INSERT、UPDATE或DELETE语句能够执行,则相关的触发器也能执行。
应该用触发器来保证数据的一致性(大小写、格式等)。在触发器中执行这种类型的处理的优点是它总是进行这种处理,而且是透明地进行,与客户机应用无关。
触发器的一种非常有意义的使用是创建审计跟踪。使用触发器,把更改(如果需要,甚至还有之前和之后的状态)记录到另一个表非常容易。
遗憾的是,MySQL触发器中不支持CALL语句。这表示不能从触发器内调用存储过程。所需的存储过程代码需要复制到触发器内