;本章主要内容;触发器(Tigger)的英文原译为“扳机”或者是“触发装置”,而数据库中的触发器即意味着,以针对数据库的操作(“触发装置”)而被调用的特殊存储过程。
MySQL语句在需要时被执行,存储过程也是如此。但是,如果你想要某条语句(或某些语句)在事件发生时自动执行,怎么办呢?例如:
a)每当增加一位雇员到数据库时,都检查数据格式是否正确。
b)每当订购一个产品时,都从库存数量中减去订购的数量。
c)无论何时删除一行,都在某个存档表中保留一个副本。
这些例子的共同之处是它们都需要在某个表发生更改时自动处理。这确切地说就是触发器。触发器是MySQL响应以下任意语句而自动执行的一条MySQL语句(或位于BEGIN和END语句之间的一组语句):DELETE/INSERT/UPDATE。
触发器可以说是实现了针对相关表的处理自动化的机制。;定义触发器使用CREATETRIGGER命令,具体语法如下;1.指定成为触发器调用方的表名;2.决定触发器运行的时刻;例12.1在数据库DB_SCHOOL的表tb_student中床架一个触发器tb_student_insert_trigger,用于每次向表tb_student中插入一行数据时将学生变量str的值设置为‘onestudentadded!’
Createtriggerdb.school.tb_student_insert_trigger
afterinsertontb_student
Foreachrow
Set@str=‘onestudentadded!’
Insertintodb_school.tb_studentvalues(‘2013110101’,’张晓勇’,’男’);
Select@str;;使用DROPTRIGGER语句删除触发器,如下所示:;12.3使用触发器
12.3.1INSERT触发器;logs表创建语句:;【示例12-1】创建触发器,向emp表插入信息;【示例12-1】执行结果;【示例12-2】向表emp中插入数据,触发触发器;【示例12-2】执行结果;【示例12-3】创建触发器,修改emp表信息,插入日志信息;【示例12-3】执行结果;【示例12-4】修改表emp中的数据,查询日志信息;【示例12-4】执行结果;12.3使用触发器
12.3.3DELETE触发器;字段名;emp_history表创建语句;【示例12-5】创建触发器删除emp表记录,留下日志;【示例12-5】执行结果;在实际的数据库应用中,可能不仅仅要在删除时留下数据的日志,例如,可能要在数据插入或者更新时留下原来数据的日志。可以清楚地看到,以上代码有一点是触发器特有的特??,那就是可以在触发器定义中使用OLD/NEW关键字,具体可参照变更前后的数据记录(如果发生时刻定义为BEFORE时,则使用[NEW.列名])。例如,在[OLD.empno]的情况下,表示从emp中删除的记录的雇员empno。;对象事件的不同,使用的关键词也不同,如下表;【示例12-6】表emp中的数据被删除,触发触发器;【示例12-6】执行结果;本章总结;本章作业