当前位置:首页 > 实用技巧 >

为什么要创建触发器(为啥创建了触发器不能用)

来源:原点资讯(www.yd166.com)时间:2024-01-08 21:50:59作者:YD166手机阅读>>

前言:

触发器只是用在特定的场合,一般情况下,我们还是在代码中处理,因为同一个业务逻辑中,如果代码和sql中都有业务逻辑,那么后期维护将很麻烦,所以要根据实际情况来选择,看是否合适。触发器就是写在数据库中的一个脚本sql,当数据库某一个字段发生改变的时候,触发一个或多条sql语句,同时让多张表的数据同步。比如我们有的表中存放了部门名称,那么当我们部门名称发生改变的时候,我们应该调用触发器同时去修改存放了“部门名称”这个冗余字段。

为什么要创建触发器,为啥创建了触发器不能用(1)

什么是触发器:

简单的说,就是一张表发生了某件事(插入、删除、更新操作),然后自动触发了预先编写好的若干条SQL语句的执行.

特点及作用:

特点:触发事件的操作和触发器里的SQL语句是一个事务操作,具有原子性,要么全部执行,要么都不执行.

作用:1.安全性。可以基于数据库的值使用户具有操作数据库的某种权利。 2.审计。可以跟踪用户对数据库的操作。 3.实现复杂的非标准的数据库相关完整性规则。触发器可以对数据库中相关的表进行连环更新。触发器能够拒绝或回退那些破坏相关完整性的变化,取消试图进行数据更新的事务。当插入一个与其主健不匹配的外部键时,这种触发器会起作用。 4.同步实时地复制表中的数据。 5.自动计算数据值,如果数据的值达到了一定的要求,则进行特定的处理。

弊端:

1.增加程序的复杂度,有些业务逻辑在代码中处理,有些业务逻辑用触发器处理,会使后期维护变得困难.

2.如果需要变动整个数据集而数据集数据量又较大时,触发器效果会非常低.

3.对于批量操作并不适合使用触发器 使用触发器实现的业务逻辑在出现问题时很难进行定位,特别是设计到多个触发器的情况 协同开发时,写业务层代码如果不清楚数据库 触发器的细节,容易搞不清到底触发了那些触发器 大量使用触发器会导致代码结构容易被打乱,阅读源码困难.

触发器的创建:

CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt

trigger_name:用来表示触发器的名称,可以自己设计 trigger_time:标识触发器的触发时机,取值是BEFORE或AFTER trigger_event:标识触发事件,取值为INSERT,UPDATE和DELETE tbl_name:标识建立触发器的表名,即在哪张表上建立触发器 trigger_stmt:触发器程序体,可以是一句SQL语句,或者用 BEGIN 和 END 包含的多条语句。 由此可见,可以建立6种触发器,即:BEFORE INSERT、BEFORE UPDATE、BEFORE DELETE、AFTER INSERT、AFTER UPDATE、AFTER DELETE。 不能在一个表中建两个相同类型的触发器,所以一个表最多只能建6个触发器;

为什么要创建触发器,为啥创建了触发器不能用(2)

查看触发器:

SHOW TRIGGERS [FROM schema_name];

这里的schema_name 就是指定的库名

删除触发器:

DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name

触发器的修改:

触发器不能修改, 只能删除以后重新创建.

触发器的执行顺序:

我们建立的数据库一般都是 InnoDB 数据库,其上建立的表是事务性表,也就是事务安全的。这时,若SQL语句或触发器执行失败,MySQL 会回滚事务,有: ①如果 BEFORE 触发器执行失败,SQL 无法正确执行。 ②SQL 执行失败时,AFTER 型触发器不会触发。 ③AFTER 类型的触发器执行失败,SQL 会回滚

栏目热文

触发器可以定义在视图上吗(怎么定义和使用触发器)

触发器可以定义在视图上吗(怎么定义和使用触发器)

基本语法创建:create trigger trigger_name on {table_name view_name}...

2024-01-08 21:59:51查看全文 >>

创建触发器(在表格中创建触发器)

创建触发器(在表格中创建触发器)

什么是触发器触发器,就是一种特殊的存储过程。触发器和存储过程一样是一个能够完成特定功能、存储在数据库服务器上的SQL片段...

2024-01-08 21:38:26查看全文 >>

触发器能建立在视图上吗(触发器可以创建在哪个选项中)

触发器能建立在视图上吗(触发器可以创建在哪个选项中)

本章节主要来讲解的是MySQL中的视图、存储过程、存储函数和触发器,这些都是MySQL数据库中的存储对象,学好能助你涨薪...

2024-01-08 21:53:44查看全文 >>

触发器不能在视图上定义吗(触发器可以设置在视图上吗)

触发器不能在视图上定义吗(触发器可以设置在视图上吗)

触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程。触发器主要是通过事件进行触发被自动调用执行的。而存储过...

2024-01-08 21:55:46查看全文 >>

可以给视图建触发器吗(触发器模板在哪)

可以给视图建触发器吗(触发器模板在哪)

1. SQLite 视图(View)2. SQLite 触发器(Trigger)3. SQLite 索引(Index)3...

2024-01-08 21:49:00查看全文 >>

触发器模板在哪(触发器怎么添加)

触发器模板在哪(触发器怎么添加)

有朋友问什么是PPT触发器,从原理上讲其实很简单,微软官方给出的解释是:PPT触发器仅仅是PPT中的一项功能,它可以是一...

2024-01-08 21:59:19查看全文 >>

触发器如何创建(如何创建触发器)

触发器如何创建(如何创建触发器)

前段时间有个朋友说,他女朋友是一名教师,想要在课堂上给学生出一套练习题,答题模式为自主答题,但网上的自主答题软件有点贵,...

2024-01-08 22:17:16查看全文 >>

中维世纪云视通手机版(中维世纪app下载安装)

中维世纪云视通手机版(中维世纪app下载安装)

中维世纪视频汇聚,以融视云和云视通平台为依托,以端到端产品能力为保障,将分散的不同品牌、不同协议的视频资源进行统一整合和...

2024-01-08 22:05:07查看全文 >>

中维世纪录像机灯光设置(中维世纪录像机怎么设置最好)

中维世纪录像机灯光设置(中维世纪录像机怎么设置最好)

鱼塘、周界、道路等监控场景,越来越多地使用全彩摄像机监控,实现24小时彩色监控。最常见的是依赖摄像机的白光补光灯,在光线...

2024-01-08 22:27:58查看全文 >>

中维世纪录像机扩容方法(中维世纪录像机怎样设置回放)

中维世纪录像机扩容方法(中维世纪录像机怎样设置回放)

通常,网络硬盘录像机都是4路、8路、16路、23路等等。如果需要安装6路或者10路的摄像头,一般我们习惯选择8路和16路...

2024-01-08 22:12:39查看全文 >>

文档排行