MySQL基础与实例教程之触发器、存储过程和异常处理
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MySQL基础与实例教程
8.1.3 删除触发器
drop trigger触发器名
MySQL基础与实例教程
8.1.4 使用触发器的注意事项
1.触发程序中如果包含select语句,该select语句不能返回结果集。 2.同一个表不能创建两个相同触发时间、触发事件的触发程序。 3.触发程序中不能使用以显式或隐式方式打开、开始或结束事务的语句,如start transaction、commit、rollback或者set autocommit=0等语句。
for each row表示行级触发器。
MySQL基础与实例教程
8.1.1 创建触发器的语法格式
触发程序中的old关键字与new关键字。 ➢ 当向表插入新记录时,在触发程序中可以使用new关键字表示新记录,当需 要访问新记录的某个字段值时,可以使用“new.字段名”的方式访问。
MySQL基础与实例教程
7.使用触发器维护InnoDB外键约束的级联选项时,数据库开发人员究竟应该选择after 触发器还是before触发器?答案是:应该首先维护子表的数据,然后再维护父表的数据, 否则可能出现错误。
MySQL基础与实例教程
8.1.4 使用触发器的注意事项
8.MySQL的触发程序不能对本表进行更新语句(例如update语句)。触发程序中的更 新操作可以直接使用set命令替代,否则可能出现错误信息,甚至陷入死循环。 9.在before触发程序中,auto_increment字段的new值为0,不是实际插入新记录时自 动生成的自增型字段值。
MySQL基础与实例教程
8.1.1 创建触发器的语法格式
触发器的触发时间有两种:before与after。 ➢before表示在触发事件发生之前执行触发程序。 ➢after表示在触发事件发生之后执行触发器。 ➢严格意义上讲一个数据库表最多可以设置六种类型的触发器。
MySQL基础与实例教程
8.1.1 创建触发器的语法格式
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基础与实例教程
之
触发器、存储过程和异常处理
MySQL基础与实例教程
内容一览
触发器可以实现表记录的自动维护。 1 存储过程
存储过程实现的功能比函数更为强
大。
2 错误触发条件和错误处理
异常处理机制可以帮助数据库开发 人员自行控制异常处理流程。
3 游标
4 预处理SQL语句 5 存储程序的说明
MySQL基础与实例教程
8.1 触发器
1 触发器主要用于表的insert、update以及
delete等操作,这些操作可以激活表的insert、
update或者delete类型的触发程序运行,从
而实现数据的自动维护。
2
创建触发器的语法格式 查看触发器的定义
3 删除触发器
4 使用触发器的注意事项
MySQL基础与实例教程
8.1 触发器
MySQL基础与实例教程
8.1.1 创建触发器的语法格式
触发事件有三种: insert:将新记录插入表时激活触发程序,例如通过insert、load data和replace语句, 可以激活触发程序运行。 update:更改某一行记录时激活触发程序,例如通过update语句,可以激活触发程序运 行。 delete:从表中删除某一行记录时激活触发程序,例如通过delete和replace语句,可以 激活触发程序运行。
Байду номын сангаасMySQL基础与实例教程
8.1.4 使用触发器的注意事项
6.InnoDB存储引擎实现外键约束关系时,建议使用级联选项维护外键数据;MyISAM 存储引擎虽然不支持外键约束关系时,但可以使用触发器实现级联修改和级联删除,进 而维护“外键”数据,模拟实现外键约束关系。
MySQL基础与实例教程
8.1.4 使用触发器的注意事项
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命令查看触发器的定义。
数据库
应用程序 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基础与实例教程
8.1.4 使用触发器的注意事项
4.MySQL触发器针对记录进行操作,当批量更新数据时,引入触发器会导致更新操作 性能降低。 5.在MyISAM存储引擎中,触发器不能保证原子性。InnoDB存储引擎支持事务,使用 触发器可以保证更新操作与触发程序的原子性,此时触发程序和更新操作是在同一个事 务中完成。
8.1.1 创建触发器的语法格式
触发程序中的old关键字与new关键字。 ➢ 当从表中删除某条旧记录时,在触发程序中可以使用old关键字表示旧记录, 当需要访问旧记录的某个字段值时,可以使用“old.字段名”的方式访问。
MySQL基础与实例教程
8.1.1 创建触发器的语法格式
触发程序中的old关键字与new关键字。 ➢ 当修改表的某条记录时,在触发程序中可以使用old关键字表示修改前的旧 记录、使用new关键字表示修改后的新记录。当需要访问旧记录的某个字段值时, 可以使用“old.字段名”的方式访问。当需要访问修改后的新记录的某个字段值 时,可以使用“new.字段名”的方式访问。
8.1.3 删除触发器
drop trigger触发器名
MySQL基础与实例教程
8.1.4 使用触发器的注意事项
1.触发程序中如果包含select语句,该select语句不能返回结果集。 2.同一个表不能创建两个相同触发时间、触发事件的触发程序。 3.触发程序中不能使用以显式或隐式方式打开、开始或结束事务的语句,如start transaction、commit、rollback或者set autocommit=0等语句。
for each row表示行级触发器。
MySQL基础与实例教程
8.1.1 创建触发器的语法格式
触发程序中的old关键字与new关键字。 ➢ 当向表插入新记录时,在触发程序中可以使用new关键字表示新记录,当需 要访问新记录的某个字段值时,可以使用“new.字段名”的方式访问。
MySQL基础与实例教程
7.使用触发器维护InnoDB外键约束的级联选项时,数据库开发人员究竟应该选择after 触发器还是before触发器?答案是:应该首先维护子表的数据,然后再维护父表的数据, 否则可能出现错误。
MySQL基础与实例教程
8.1.4 使用触发器的注意事项
8.MySQL的触发程序不能对本表进行更新语句(例如update语句)。触发程序中的更 新操作可以直接使用set命令替代,否则可能出现错误信息,甚至陷入死循环。 9.在before触发程序中,auto_increment字段的new值为0,不是实际插入新记录时自 动生成的自增型字段值。
MySQL基础与实例教程
8.1.1 创建触发器的语法格式
触发器的触发时间有两种:before与after。 ➢before表示在触发事件发生之前执行触发程序。 ➢after表示在触发事件发生之后执行触发器。 ➢严格意义上讲一个数据库表最多可以设置六种类型的触发器。
MySQL基础与实例教程
8.1.1 创建触发器的语法格式
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基础与实例教程
之
触发器、存储过程和异常处理
MySQL基础与实例教程
内容一览
触发器可以实现表记录的自动维护。 1 存储过程
存储过程实现的功能比函数更为强
大。
2 错误触发条件和错误处理
异常处理机制可以帮助数据库开发 人员自行控制异常处理流程。
3 游标
4 预处理SQL语句 5 存储程序的说明
MySQL基础与实例教程
8.1 触发器
1 触发器主要用于表的insert、update以及
delete等操作,这些操作可以激活表的insert、
update或者delete类型的触发程序运行,从
而实现数据的自动维护。
2
创建触发器的语法格式 查看触发器的定义
3 删除触发器
4 使用触发器的注意事项
MySQL基础与实例教程
8.1 触发器
MySQL基础与实例教程
8.1.1 创建触发器的语法格式
触发事件有三种: insert:将新记录插入表时激活触发程序,例如通过insert、load data和replace语句, 可以激活触发程序运行。 update:更改某一行记录时激活触发程序,例如通过update语句,可以激活触发程序运 行。 delete:从表中删除某一行记录时激活触发程序,例如通过delete和replace语句,可以 激活触发程序运行。
Байду номын сангаасMySQL基础与实例教程
8.1.4 使用触发器的注意事项
6.InnoDB存储引擎实现外键约束关系时,建议使用级联选项维护外键数据;MyISAM 存储引擎虽然不支持外键约束关系时,但可以使用触发器实现级联修改和级联删除,进 而维护“外键”数据,模拟实现外键约束关系。
MySQL基础与实例教程
8.1.4 使用触发器的注意事项
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命令查看触发器的定义。
数据库
应用程序 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基础与实例教程
8.1.4 使用触发器的注意事项
4.MySQL触发器针对记录进行操作,当批量更新数据时,引入触发器会导致更新操作 性能降低。 5.在MyISAM存储引擎中,触发器不能保证原子性。InnoDB存储引擎支持事务,使用 触发器可以保证更新操作与触发程序的原子性,此时触发程序和更新操作是在同一个事 务中完成。
8.1.1 创建触发器的语法格式
触发程序中的old关键字与new关键字。 ➢ 当从表中删除某条旧记录时,在触发程序中可以使用old关键字表示旧记录, 当需要访问旧记录的某个字段值时,可以使用“old.字段名”的方式访问。
MySQL基础与实例教程
8.1.1 创建触发器的语法格式
触发程序中的old关键字与new关键字。 ➢ 当修改表的某条记录时,在触发程序中可以使用old关键字表示修改前的旧 记录、使用new关键字表示修改后的新记录。当需要访问旧记录的某个字段值时, 可以使用“old.字段名”的方式访问。当需要访问修改后的新记录的某个字段值 时,可以使用“new.字段名”的方式访问。