当前位置:文档之家› MySQL基础与实例教程之触发器、存储过程和异常处理

MySQL基础与实例教程之触发器、存储过程和异常处理

for each row表示行级触发器。
MySQL基础与实例教程
8.1.1 创建触发器的语法格式
触发程序中的old关键字与new关键字。 ➢ 当向表插入新记录时,在触发程序中可以使用new关键字表示新记录,当需 要访问新记录的某个字段值时,可以使用“new.字段名”的方式访问。
MySQL基础与实例教程
MySQL基础与实例教程
8.1.4 使用触发器的注意事项
6.InnoDB存储引擎实现外键约束关系时,建议使用级联选项维护外键数据;MyISAM 存储引擎虽然不支持外键约束关系时,但可以使用触发器实现级联修改和级联删除,进 而维护“外键”数据,模拟实现外键约束关系。
MySQL基础与实例教程
8.1.4 使用触发器的注意事项
数据库
应用程序 update t set …; insert into t values(...); delete from t …;
abcde a1 b1 c1 d1 e1 a2 b2 c2 d2 e2 a3 b3 c3 d3 e3 a4 b4 c4 d4 e4
表t
before update trigger
MySQL基础与实例教程

触发器、存储过程和异常处理
MySQL基础与实例教程
内容一览
触发器可以实现表记录的自动维护。 1 存储过程
存储过程实现的功能比函数更为强
大。
2 错误触发条件和错பைடு நூலகம்处理
异常处理机制可以帮助数据库开发 人员自行控制异常处理流程。
3 游标
4 预处理SQL语句 5 存储程序的说明
MySQL基础与实例教程
7.使用触发器维护InnoDB外键约束的级联选项时,数据库开发人员究竟应该选择after 触发器还是before触发器?答案是:应该首先维护子表的数据,然后再维护父表的数据, 否则可能出现错误。
MySQL基础与实例教程
8.1.4 使用触发器的注意事项
8.MySQL的触发程序不能对本表进行更新语句(例如update语句)。触发程序中的更 新操作可以直接使用set命令替代,否则可能出现错误信息,甚至陷入死循环。 9.在before触发程序中,auto_increment字段的new值为0,不是实际插入新记录时自 动生成的自增型字段值。
8.1.1 创建触发器的语法格式
触发程序中的old关键字与new关键字。 ➢ 当从表中删除某条旧记录时,在触发程序中可以使用old关键字表示旧记录, 当需要访问旧记录的某个字段值时,可以使用“old.字段名”的方式访问。
MySQL基础与实例教程
8.1.1 创建触发器的语法格式
触发程序中的old关键字与new关键字。 ➢ 当修改表的某条记录时,在触发程序中可以使用old关键字表示修改前的旧 记录、使用new关键字表示修改后的新记录。当需要访问旧记录的某个字段值时, 可以使用“old.字段名”的方式访问。当需要访问修改后的新记录的某个字段值 时,可以使用“new.字段名”的方式访问。
MySQL基础与实例教程
8.1.4 使用触发器的注意事项
4.MySQL触发器针对记录进行操作,当批量更新数据时,引入触发器会导致更新操作 性能降低。 5.在MyISAM存储引擎中,触发器不能保证原子性。InnoDB存储引擎支持事务,使用 触发器可以保证更新操作与触发程序的原子性,此时触发程序和更新操作是在同一个事 务中完成。
begin
after
… insert trigger before
end begin
after
… delete trigger
end begin
before

after
end
MySQL基础与实例教程
8.1.1 创建触发器的语法格式
create trigger 触发器名 触发时间 触发事件 on 表名 for each row begin 触发程序 end
MySQL基础与实例教程
8.1.1 创建触发器的语法格式
触发器的触发时间有两种:before与after。 ➢before表示在触发事件发生之前执行触发程序。 ➢after表示在触发事件发生之后执行触发器。 ➢严格意义上讲一个数据库表最多可以设置六种类型的触发器。
MySQL基础与实例教程
8.1.1 创建触发器的语法格式
8.1 触发器
1 触发器主要用于表的insert、update以及
delete等操作,这些操作可以激活表的insert、
update或者delete类型的触发程序运行,从
而实现数据的自动维护。
2
创建触发器的语法格式 查看触发器的定义
3 删除触发器
4 使用触发器的注意事项
MySQL基础与实例教程
8.1 触发器
MySQL基础与实例教程
8.1.3 删除触发器
drop trigger触发器名
MySQL基础与实例教程
8.1.4 使用触发器的注意事项
1.触发程序中如果包含select语句,该select语句不能返回结果集。 2.同一个表不能创建两个相同触发时间、触发事件的触发程序。 3.触发程序中不能使用以显式或隐式方式打开、开始或结束事务的语句,如start transaction、commit、rollback或者set autocommit=0等语句。
MySQL基础与实例教程
8.1.1 创建触发器的语法格式
触发事件有三种: insert:将新记录插入表时激活触发程序,例如通过insert、load data和replace语句, 可以激活触发程序运行。 update:更改某一行记录时激活触发程序,例如通过update语句,可以激活触发程序运 行。 delete:从表中删除某一行记录时激活触发程序,例如通过delete和replace语句,可以 激活触发程序运行。
MySQL基础与实例教程
8.1.1 创建触发器的语法格式
➢ old记录是只读的,可以引用它,但不能更改它。在before触发程序中,可使 用“set new.col_name = value”更改new记录的值。
MySQL基础与实例教程
8.1.2 查看触发器的定义
(1)使用show trigger like命令查看与模式模糊匹配的触发器信息。 (2)通过查询information_schema数据库中的triggers表,可以查看触发器的定 义。 select * from information_schema.triggers\G (3)使用show create trigger命令查看触发器的定义。
相关主题