mysql临时禁用触发器

mysql支持设定session变量,并且有带入到触发器中使用的能力,故可以间接的设置触发器失效

思路是:

在执行前设定一个session变量,执行过程中判断该变量的值(没有设定该变量的值时该变量默认值为null)

例:

set @disable_triggers = 1;
UPDATE
std_importpc pc  JOIN std_import_checked chk on pc.TrademarketCode in (‘0‘,‘1‘) and chk.Texch = ‘.OF‘
and chk.SecuCode = pc.SecuCode
set pc.checkedID = chk.ID;
set @disable_triggers = NULL;

 

ALTER TABLE `std_importchoice` AUTO_INCREMENT=6854278;
DROP TRIGGER IF EXISTS `TRG_PC_Checked`;
DELIMITER ;;
CREATE TRIGGER `TRG_PC_Checked` AFTER UPDATE ON `std_importpc` FOR EACH ROW
begin

IF @disable_triggers IS NULL THEN
update std_import_checked d set d.Version = now() , d.CheckedStatus = 3 where d.SecuCode  = new.SecuCode and d.TrademarketCode = new.TrademarketCode and d.CheckedStatus = 4;

End IF;
end
;;
DELIMITER ;

时间: 2024-11-02 23:38:13

mysql临时禁用触发器的相关文章

mysql如何临时禁用触发器

mysql如何临时禁用触发器 起因 ??Mysql的触发器,在触发控制上,只能按照对数据的操作方式(Insert,Update,Delete)以及操作前后(before,after)进行触发控制.但是如果碰到以下需求又该如何:对于A表的Insert语句,只有符合某些条件的数据触发Insert触发器. 自己当初条件反射的写法 ??在对应的触发器语句中,增加条件判断的逻辑.举个栗子: 有个用户信息表user,有个通讯录表addressbook,两张表表结构类似,业务需求上某些数据需要做数据实时同步,

mysql中的触发器和事务的操作

触发器 语法 创建触发器: CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt; trigger_time是触发程序的动作时间.它可以是BEFORE或AFTER trigger_event指明了激活触发程序的语句的类型. trigger_event可以是下述值之一: ·             INSERT:将新行插入表时激活触发程序,例如,通过INSERT.LO

mysql 查询表,视图,触发器,函数,存储过程

1. mysql查询所有表: SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '数据库名' AND  TABLE_TYPE ='BASE TABLE' mysql查询建表语句: show create table `表名` 2.mysql查询所有视图: SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '数据库名'

MySQL的学习--触发器

MySQL包含对触发器的支持.触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行. 创建触发器 在MySQL中,创建触发器语法如下: CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt 其中: trigger_name:标识触发器名称,用户自行指定:trigger_time:标识触发时机,取值为

【MySQL笔记】触发器,存储过程和函数

一.触发器 触发器(TRIGGER):是由事件来触发某个操作.当数据库系统执行这些事件时,就会激活触发器执行相应的操作.MySQL从5.0.2版本开始支持触发器. 触发事件:INSERT语句.UPDATE语句和DELETE语句. 1.创建触发器 1.1.创建只有一个执行语句的触发器 CREATE  TRIGGER 触发器名  BEFORE | AFTER  触发事件 ON  表名 FOR  EACH  ROW  执行语句 1.2.创建有多个执行语句的触发器 DELIMITER&& CREA

mysql存储过程和触发器的应用

***********[mysql 存储过程和触发器 -- 别安驹]********************* 1.什么情况下使用存储过程? 完成一些比较麻烦的逻辑,比如多表在mysql端的cpu很空闲的情况下,用存储过程是不错的选择, 1.1.简单的存储过程示例:简单写入 DELIMITER $$ USE `curl_test`$$ DROP PROCEDURE IF EXISTS `data_s`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `

MySQL 临时目录

MySQL数据目录/data/mysql所在的上层目录/data磁盘空间不足导致MySQL启动失败,所以清理了/data目录下除了mysql子目录外的其他无用目录.重启发现还是失败.检查错误日志.看到如下错误:/usr/local/mysql/bin/mysqld: Can't create/write to file '/data/tmp/ibbLmEoD' (Errcode: 13 - Permission denied) 原来是清理无用目录时不小心把MySQL配置文件中指定的tmpdir-

MySQL 视图、触发器、函数、存储过程

1.视图 视图的概念 视图就是一条 select 语句执行后返回的结果集. 视图的特性 视图是对若干张基本表的引用,一张虚表,查询语句的执行结果,不存储具体的数据(基本表数据发生了改变,视图也会跟着改变) 视图的作用 方便操作,特别是查询操作,减少复杂的SQL语句,增强可读性:更加安全,数据库授权命令不能限定到特定的行和特定的列,但通过合理创建视图,可以把权限限定到行列级别: 应用场景 1.权限控制的时候,不希望用户访问表中某些敏感信息的列 2.对表进行复杂的关联查询时 示例: 查询小飞上的所以

[转]mysql查看所有触发器以及存储过程等操作集合

原贴:https://www.cnblogs.com/FondWang/p/10780999.html 今天在做每个月定时扣费的功能 用到了Mysql的Event Scheduler 昨完之后发现一个问题 Event Scheduler 默认是不开启的 要在mysql内执行SET GLOBAL event_scheduler=on; 重启服务之后 测试发现 事件还是未被调用 , 然后在执行SHOW VARIABLES LIKE 'event_scheduler'; 查看,惊奇的发现 重启之后 e