
接上一期使用SQL语句查看、创建、删除索引INDEX从本期开始进入到MySQL进阶应用之数据库编程本章从触发器TRIGGER讲起下一期预告 事件EVENTWhat is Trigger一个被指定关联到一张表的数据库对象当对一个表的特定事件出现时它将会被激活。触发器具有MySQL语句在需要时才被执行的特点即某条(或某些)MySQL语句在特定事件发生时自动执行。Application用于保护表中的数据。当有操作影响到触发器所保护的数据时触发器就会自动执行从而保障数据库中数据的完整性以及多张表之间数据的一致性。How触发器就是MySQL响应INSERT、LOAD DATA、UPDATE和DELETE、REPLACE语句而自动执行的一条MySQL语句。触发器就是位于BEGIN和END语句之间的一组MySQL语句。其他语句不支持触发器CREATE TRIGGER#1 创建TRIGGERCREATETRIGGERtrigger_name-- 定义触发器名字{ BEFORE|AFTER} {INSERT|LOADDATA|UPDATE|DELETE|REPLACE}-- 触发器时机和触发语句种类ONdb_name.tbl_name-- 必须是永久性表NO 临时表或视图ViewFOR EACH ROW-- 触发器的作用范围trigger_body-- 触发器执行的操作多条语句需使用BEGIN...END;#2 查看DB中已有的触发器SHOWTRIGGERSFROM|INdb_name;#3 删除触发器 (触发器不能更新或覆盖DROPTRIGGER[IFEXISTSdb_name.]trigger_name;#4 创建触发器的实操案例## 设计一个名称为tr_emp的触发器完成的功能是 当删除部门表中的记录时将职工表中的部门信息置空。并使用命令触发该触发器并查看结果。CREATEtriggertr_empafterDELETEONtb_deptFOR EACH rowUPDATEtb_employeeSETdeptnoWHEREdeptnoold.deptno;deletefromtb_deptWHEREdeptnoD2;SELECT*FROMtb_employee;TRIGGER TYPEsINSERT 触发器 可引用一个名为NEW(不区分大小写)的虚拟表来访问被插入的行DELETE触发器 可引用一个名为OLD(不区分大小写)的虚拟表来访问被删除的行UPDATE触发器 既可以引用名为OLD的虚拟表访问以前的值也可以应用一张名为NEW的访问新更新的值#UPDATE触发器实例#创建UPDATE触发器CREATETRIGGERdb_company.tb_emp_update_trigger BEFOREUPDATEONdb_company.tb_empFOR EACH ROWSETNEW.nationOLD.native;#使用UPDATE语句UPDATEdb_company.tb_empSETnation壮WHEREempName周存;#验证triggerSELECTnationFROMdb.company.tb_empWHEREempName周存;总结应该多使用触发器来保证数据的一致性、完整性和正确性。触发器有一种十分有意义的使用模式 –创建审计跟踪也就是可使用触发器把表的更改状态以及之前和之后的状态记录到另外一张数据表中。下一期预告 事件EVENT