-
2021-01-18 19:28:35
tab1表在插入数据时看 tab2表是否有数据,如果插入数据status=0时把数据写入到tab2表,否则将tab2 code相等的数据删除,有时tab1表写入数据时触发器没有执行??触发器写的有问题么??触发器代码如下:
DELIMITER $$
USE `test`$$
DROP TRIGGER /*!50032 IF EXISTS */ `t_afterinsert_no_test`$$
CREATE
/*!50017 DEFINER = 'root'@'%' */
TRIGGER `t_afterinsert_no_test` AFTER INSERT ON `tab1`
FOR EACH ROW BEGIN
IF new.status='0' THEN
INSERT INTO test.tab2 (code,title,date,userid,new.status)
SELECT new.code,new.title,new.d,new.userid,new.status FROM DUAL
WHERE NOT EXISTS (SELECT * FROM test.tab2 WHERE code=new.code);
ELSE
DELETE FROM test.tab2 WHERE code=new.code;
END IF;
END;
$$
DELIMITER ;
更多相关内容 -
SQL Server用触发器强制执行业务规则
2020-03-03 23:25:01Microsoft:registered: SQL Server:trade_mark: 2000 提供了两种主要机制来强制业务规则和数据完整性:约束和触发器。触发器是一种特殊类型的存储过程,它在指定的表中的数据发生变化时自动生效。唤醒调用触发 器以... -
mysql 触发器循环执行操作
2022-03-23 10:22:44mysql 触发器循环执行操作 一、应用场景 添加菜单的时候默认给已设置菜单权限的用户新增此权限,本功能应该是一起写好的。但由于我比较懒,加上这个权限不是那么重要,因此就没写 添加菜单的功能,添加菜单都是在...mysql 触发器循环执行操作
一、应用场景
添加菜单的时候默认给已设置菜单权限的用户新增此权限,本功能应该是一起写好的。但由于我比较懒,加上这个权限不是那么重要,因此就没写 添加菜单的功能,添加菜单都是在数据库中直接操作。由而引发了这个问题:使用触发器添加菜单循环向菜单权限表增加该菜单权限。大家平时不要这样使用菜单权限哈,这里是偷个懒引发这个问题。
二、上代码
这里我用的是游标的循环,其他几种可以看看网上教程
CREATE TRIGGER `menu增加` AFTER INSERT ON `tab_menu` FOR EACH ROW BEGIN /*定义属性*/ declare done int default 0;/*判断循环是否关闭的标志位*/ declare this_pid int(11); declare this_auth_ids varchar(255); /*定义游标 以及赋值 如果多个值就注意下游标取值 ***/ declare result cursor for select p_id,menu_ids from tab_menu_auth where menu_ids != ''; /*定义异常处理 */ declare continue handler for not found set done = 1; /*打开游标*/ open result ; /*循环开始*/ flag_loop:loop /*如果 done==1 有异常 结束循环*/ if done = 1 then leave flag_loop; end if; /*提取游标的值 多个值的时候: fetch xxx into xxx,xxx 按照定义游标result里值的顺序赋值*/ fetch result into this_pid,this_auth_ids; /*根据游标中的数据更新menu_auth表*/ update tab_menu_auth set menu_ids = concat(this_auth_ids,',',new.id) where p_id = this_pid; end loop; /*循环结束*/ close result ;/*关闭游标*/ end;
三、简单说下
首先定义触发器insert事件after。
1.先定义变量 declare done int default 0;/判断循环是否关闭的标志位/
declare this_pid int(11);declare this_auth_ids varchar(255);第一个是用来判断是否有异常,第2,3变量是用来存储要循环的值的变量。
2. declare result cursor for select p_id,menu_ids from tab_menu_auth where menu_ids != ‘’; /查出所有设置过权限的用户id和权限ids 并赋值给reuslt/
3. flag_loop:loop /循环开始/
4. fetch result into this_pid,this_auth_ids; /提取result的值分别赋值给之前定义好的标量this_pid和this_auth_ids/
5. /根据游标中的数据更新menu_auth表/
update tab_menu_auth set menu_ids = concat(this_auth_ids,’,’,new.id) where p_id = this_pid;
/*concat(this_auth_ids,’,’,new.id)是把当前查出的ids拼接上‘,’然后再拼接上new.id。*new.id是触发器中的系统变量吧,表示新增记录的id/
6. end loop; /循环结束/ -
Oracle DML触发器的执行顺序.pdf
2021-10-10 06:57:18Oracle DML触发器的执行顺序.pdf -
quartz动态创建触发器,动态修改触发器时间
2014-08-05 12:39:40最近项目在用quartz去定时执行一些方法,这些时间都是动态的,而且还要去动态的去修改这些触发的时间,但是网上资料不全,这里写了个案例希望可以帮到大家,包呢得靠大家自己下载了,我这里用的包是quartz官网上下载... -
Oracle触发器语法和执行次序详解
2022-03-24 10:52:12触发器(trigger): 是根据数据的机制来触发的行为, 不能主动执行, 也不能接收参数触发器(trigger): 是根据数据的机制来触发的行为, 不能主动执行, 也不能接收参数
触发器语法
create or replace trigger `触发器名称` {before|after} trgger_event on `表名` {for each row} {when trigger_condition} trigger_body
代码解释:
{before|after}
: 指定触发器是在触发事件之前触发还是发生之后触发trigger_event
: 触发事件 在DML触发器中主要是 insert(增) delete(删) update(改)for each row
: 指定创建的是行级触发器, 如果没有则是语句级触发器when trigger_condition
: 添加触发的条件trigger_body
: 标准的PL/SQL语句块
抛出异常语法
-- 抛出异常(编号范围:20000~-20999,话术自定义) raise_application_error(-20001,'工资不能低于原来的工资')
触发器的执行次序
- 执行before的语句级触发器
- 执行before的行级触发器
- 执行DML sql语句
- 执行after的语句级触发器
- 执行after的行级触发器
-
oracle触发器定时执行
2016-04-26 12:03:50请高手帮忙写一个触发器,当表中插入数据时,一段时间后(3分钟或者5分钟)自动 修改表中最新数据(有插入时间字段)的某个字段为false或者为1; -
Sql Server触发器(执行顺序控制)
2019-08-16 22:01:21一、触发器分类 DDL 触发器将激发,以响应各种数据定义语言 (DDL) 事件。... 执行 DDL 式操作的系统存储过程也可以激发 DDL 触发器。 DML 触发器为特殊类型的存储过程,可在发生数据操作语言 (DML)...一、触发器分类
DDL 触发器将激发,以响应各种数据定义语言 (DDL) 事件。 这些事件主要与以关键字 CREATE、ALTER、DROP、GRANT、DENY、REVOKE 或 UPDATE STATISTICS 开头的 Transact-SQL 语句对应。 执行 DDL 式操作的系统存储过程也可以激发 DDL 触发器。
DML 触发器为特殊类型的存储过程,可在发生数据操作语言 (DML) 事件时自动生效,以便影响触发器中定义的表或视图。 DML 事件包括 INSERT、UPDATE 或 DELETE 语句。 DML 触发器可用于强制业务规则和数据完整性、查询其他表并包括复杂的 Transact-SQL 语句。 将触发器和触发它的语句作为可在触发器内回滚的单个事务对待。 如果检测到错误(例如,磁盘空间不足),则整个事务即自动回滚。
DML触发器又分为 AFTER 触发器与 INSTEAD OF 触发器
AFTER 触发器
在执行 INSERT、UPDATE、MERGE 或 DELETE 语句的操作之后执行 AFTER 触发器。 如果违反了约束,则永远不会执行 AFTER 触发器;因此,这些触发器不能用于任何可能防止违反约束的处理。 对于在 MERGE 语句中指定的每个 INSERT、UPDATE 或 DELETE 操作,将为每个 DML 操作触发相应的触发器。
INSTEAD OF 触发器
INSTEAD OF 触发器替代下列触发语句的标准操作。 因此,触发器可用于对一个或多个列执行错误或值检查,然后在插入、更新或删除行之前执行其他操作。 例如,当在工资表中小时工资列的更新值超过指定值时,可以将触发器定义为产生错误消息并回滚该事务,或在将记录插入工资表中之前将新记录插入到审核记录。 INSTEAD OF 触发器的主要优点是可以使不能更新的视图支持更新。 例如,基于多个基表的视图必须使用 INSTEAD OF 触发器来支持引用多个表中数据的插入、更新和删除操作。 INSTEAD OF 触发器的另一个优点是使您得以编写这样的逻辑代码:在允许批处理的其他部分成功的同时拒绝批处理中的某些部分。
二、AFTER 触发器执行的顺序
通俗理解为instead of触发器是先于入库之前执行的,同一个表上只能有一个instead of触发器;但是可以有多个alter触发器,多个alter处理器执行的先后顺序是怎么样的呢?默认是按照触发器名称的顺序执行的,但是可以通过sql语句的方式设置顺序。
可将与表关联的 AFTER 触发器之一指定为执行每个 INSERT、DELETE 和 UPDATE 触发操作时激发的第一个或最后一个 AFTER 触发器。 在第一个和最后一个触发器之间激发的 AFTER 触发器将按未定义的顺序执行。
sql语句语法为:sp_settriggerorder @triggername = ‘MyTrigger’, @order = ‘first’, @stmttype = ‘UPDATE’感谢参考材料:
https://docs.microsoft.com/zh-cn/sql/relational-databases/triggers/logon-triggers?view=sql-server-2017
https://blog.csdn.net/daoyuly/article/details/3931025
https://www.cnblogs.com/BinBinGo/p/6431244.html
https://www.cnblogs.com/wghao/archive/2011/05/15/2047221.html -
oracle forms 触发器执行顺序
2017-05-23 11:00:24oracle ebs forms开发 -
sqlserver 禁用触发器和启用触发器的语句
2020-12-15 06:50:49您可能感兴趣的文章:SQLServer2005触发器提示其他会话正在使用事务的上下文的解决方法SQL Server触发器及触发器中的事务学习SQL Server 触发器 表的特定字段更新时,触发Update触发器SQLServer触发器创建、删除、... -
数据库触发器机制设计与实现
2020-12-08 19:59:10触发器机制实现主要涉及触发事件的检测以及触发条件的判决等关键技术问题,以及对触发器的编译存储和调用执行等具体操作。 本文以国产数据库管理系统GKD-Base为原型,在兼容Oracle 规范的PL/SQL引擎基础上,提 -
三种触发器的执行流程
2010-07-13 19:07:25从总体来说,触发器很简单的,只要我们能够撑握他们的执行流程和原理,我们就能根据需要写出想要的触发器 -
Oracle DML触发器
2021-05-04 01:29:52DML触发器的要点DML触发器是定义在表上的触发器,由DML事件引发。...触发的时间有BEFORE和AFTER两种,分别表示触发动作发生在DML语句执行之前和语句执行之后。* 确定触发级别,有语句级触发器和行级触发器两... -
sqlserver 创建触发器 远程服务器相应执行SQL语句
2016-10-18 12:04:42 -
oracle触发器执行顺序.pdf
2021-10-08 16:37:07oracle触发器执行顺序.pdf -
SQL SERVER(43)触发器执行的顺序
2020-06-05 16:38:15在一张表有多个触发器的时候,允许开发人员对AFTER触发器被激发的顺序进行控制。控制顺序需要用到sp_settriggerorder存储过程,并注意以下几个方面: 顺序只能控制第一个触发器和最后一个触发器,除此之外的中间... -
SQL触发器建立后没有执行结果。
2020-06-12 11:11:19触发器可以建立,单独语句也可以执行,就是新增单据和修改单据是,触发不了,请各位大师看看是哪里出问题了。 create trigger WWPrice on WWOrderEntry for insert,update AS declare @ID int --ID是... -
Oracle触发器用法实例详解
2020-12-16 01:13:34触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行。因此触发器不需要人为的去调用,也不能调用。然后,触发器的触发条件其实在你定义的时候就已经设定好了。这里面需要说明一下,... -
在插入触发器阻止执行以下INSERT INTO语句之前
2021-01-28 07:11:30我在MySQL Workbench 5.6中执行以下SQL代码时遇到问题。该表是有序创建的,触发器创建...在插入触发器阻止执行以下INSERT INTO语句之前我真的无法想象运行触发器创建脚本后发生了什么!如果我在插入语句之前不运行tr... -
数据库——触发器基础知识
2020-12-14 16:16:44目录 1 触发器的定义 ...在MySQL中用old和new表示触发器执行前和执行后的数据。 new在before触发器中赋值、取值,在after触发器中取值。在after的触发器中,new的赋值已经结束了,只能读取内容。 深 -
触发器记录新增和修改操作.txt
2019-07-05 15:33:43根据用户新增和修改操作,触发器自动生成记录,用来记录用户的操作。(说明展开表,找到触发器右击新建触发器即可-新增和修改要分开创建) -
【转】mysql触发器的实战(触发器执行失败,sql会回滚吗)
2021-01-19 20:32:531 引言Mysql的触发器和存储过程一样,都是嵌入到mysql的一段程序。触发器是mysql5新增的功能,目前线上凤巢系统、北斗系统以及哥伦布系统使用的数据库均是mysql5.0.45版本,很多程序比如fc-star管理端,sfrd(das),... -
mysql 触发器用法实例详解
2021-01-19 22:54:32触发器 trigger是一种特殊的存储过程,他在插入(inset)、删除(delete)或修改(update)特定表中的数据时触发执行,它比数据本身标准的功能更精细和更复杂的数据控制能力。触发器不是由程序调用,而是由某个... -
sqlserver 触发器学习(实现自动编号)
2020-12-15 17:54:02DDL触发器:在用户对数据库执行数据定义(CREATE、ALTER、DROP或相似的语句)对数据库结构进行修改时激活而做出响应。 DML触发器:在用户对数据库执行数据操作时发生,触发器中的代码会被自动调用。 2、DML触发器... -
oracle 触发器trigger 批量执行创建
2020-03-10 10:19:521.oracle触发器批量执行创建 批量执行创建触发器时,只有当触发器后面加上“/”才可以执行下一个 例如create or replace trigger t_mould_trig before insert on t_mould --数据库表名 for each row declare begin ... -
Oracle Form 触发器的执行顺序
2011-03-21 23:29:16Oracle Form 触发器的执行顺序 -
SQL Server数据库实验_存储过程与触发器设计.docx
2021-08-11 08:10:29SQL SERVER为每个触发器都创建了两个临时表INSERTED表和DELETED表,这两个表的逻辑结构与被触发器作用的表一样,用户可以读取这两个表的内容,但不能对它们进行修改,触发器执行完后,这两个表也会自动删除。...