首页 > 其他分享 >触发器

触发器

时间:2023-06-03 23:24:10浏览次数:35  
标签:触发器 old -- empno emp new

触发器

一、介绍

触发器是与表有关的数据库对象,指在insert/update/delete之前或之后,触发并执行触发器中定义SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作。

使用别 名OLD 和 NEW 来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发,不支持语句级触发。

触发器类型 NEW 和 OLD
INSERT型触发器 NEW 表示将要或者已经新增的数据类型
UPDATE型触发器 OLD 表示修改之前的数据,NEW 表示将要修改或者已经修改后的数据
DELETE型触发器 OLD 表示将要或者已经删除的数据

二、语法

  • 创建

    CREATE TRIGGER trigger_name
    BEFORE/AFTER INSERT/UPDATE/DELETE
    ON tbl_name FOR EACH ROW -- 行级触发器
    BEGIN
    	trigger_stmt;
    END;
    
  • 查看

    SHOW TRIGGERS;
    
  • 删除

    DROP TRIGGER [schema_name.]trigger_name; -- 如果没有指定schema_name,默认为当前数据库。
    

代码演示:

-- 触发器

-- 准备工作:日志表 user_logs
CREATE TABLE user_logs(
	id INT(11) NOT NULL auto_increment,
	
	operation VARCHAR(20) NOT NULL COMMENT '操作类型,insert/update/delete',
	
	operate_time datetime NOT NULL COMMENT '操作时间', 
	
	operate_empno INT(11) NOT NULL COMMENT '操作的empno',
	
	operate_params VARCHAR(1000) COMMENT '操作参数',
	
	PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;


-- 插入数据触发器(insert)
CREATE TRIGGER emp_insert_trigger
	AFTER INSERT ON emp FOR EACH ROW
BEGIN
	INSERT INTO user_logs VALUES(null, 'insert', NOW(), new.empno,  CONCAT('输入的内容:',new.empno,new.ename, new.job, new.mgr,new.hiredate,new.sal,new.comm,new.deptno));
END;
	
-- 查看	
SHOW TRIGGERS;

-- 删除
DROP TRIGGER emp_insert_trigger;

INSERT INTO emp VALUES(7800, 'TIM', 'SALESMAN',7902, '1980-12-15 00:00:00', 900, 1000, 20);
SELECT * FROM user_logs;


-- 修改数据触发器(update)
CREATE TRIGGER emp_update_trigger
	AFTER UPDATE ON emp FOR EACH ROW
BEGIN
	INSERT INTO user_logs VALUES(null, 'update', NOW(), new.empno,  CONCAT('更新之前的数据:','empno=',old.empno,'ename=',old.ename,'job=', old.job, 'mgr=',old.mgr,'hiredate=',old.hiredate,'sal=',old.sal,'comm=',old.comm,'deptno=',old.deptno,
'| 更新之后的数据:','empno=',new.empno,'ename=',new.ename,'job=', new.job, 'mgr=',new.mgr,'hiredate=',new.hiredate,'sal=',new.sal,'comm=',new.comm,'deptno=',new.deptno));
END;

SHOW TRIGGERS;

UPDATE emp SET sal = 1900 WHERE empno = 7800;

UPDATE emp SET sal = 1900 WHERE empno < 7800; -- empno < 7800 的记录有几条,就执行几次触发器
SELECT * FROM user_logs;


-- 删除数据的触发器(delete)
CREATE TRIGGER emp_delete_trigger
	AFTER DELETE ON emp FOR EACH ROW
BEGIN
	INSERT INTO user_logs VALUES(null, 'delete', NOW(), old.empno, CONCAT('删除之前的数据:','empno=',old.empno,'ename=',old.ename,'job=', old.job, 'mgr=',old.mgr,'hiredate=',old.hiredate,'sal=',old.sal,'comm=',old.comm,'deptno=',old.deptno));
END;

SHOW TRIGGERS;

DELETE FROM emp WHERE empno = 7800;
SELECT * FROM user_logs;

标签:触发器,old,--,empno,emp,new
From: https://www.cnblogs.com/zh-Note/p/17454984.html

相关文章

  • 数据库应用2023-06-03 触发器
    Mysql触发器实例详解-Mr_Echo-博客园(cnblogs.com)CREATETRIGGERtrigger_nametrigger_timetrigger_eventONtb_nameFOREACHROWtrigger_stmttrigger_name:触发器的名称tirgger_time:触发时机,为BEFORE或者AFTERtrigger_event:触发事件,为INSERT、DELETE或者UPDATEtb_......
  • MySQL之视图,索引,存储过程,触发器--实操
    一.视图什么是视图?视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含系列带有名称的列和行数据。行和列数据来自定义视图的查询所引用的表,并且在引用视图时动态生成。简单的来说视图是由select结果组成的表。视图的出现其实优化了MySQL对用户权限的管理,我们在以......
  • /proc/sys/kernel/sysrq /proc/sysrq-trigger----强制重启/触发器
    LINUX远程强制重启/proc/sys/kernel/sysrq/proc/sysrq-trigger----触发器ttp://blog.csdn.net/beckdon/article/details/41313713http://blog.csdn.net/chinaclock/article/details/50499530http://www.cnblogs.com/justin-y-lin/p/5424555.htmlhttps://www.cnblogs.com/yang......
  • 15)触发器
    1、触发事件:触发器定义了一系列操作,称为触发程序,当触发事件发生时,触发程序会自动运行;格式如下:createtrigger触发器名触发时间触发事件on表名foreachrowbegin触发程序end;触发时间:before、after;触发事件:insert、update、delete;foreachnow:表示行级触发器;......
  • 数据库 视图、触发器、存储过程
    数据库视图、触发器、存储过程一直以来总是CRUD,只会操作数据库表了,其他的视图、触发器、存储过程忘完了,但因为生产事故被迫研究了一下,简单回顾一下概念吧。视图在看系统的权限管理部分时,发现它是从视图中查询数据的,通过将多个权限表的数据关联为视图,大大减少了查询时的SQL......
  • MySQL触发器Trigger加载以及目前局限
    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者:亮文章来源:GreatSQL社区原创概念介绍首先需要知道MySQL中触发器特点,以及表table相关触发器加载方式MySQL中单个trigger仅支持单事件触发即单......
  • MySQL 存储过程&触发器&事务
    存储过程概念存储过程(StoredProcedure),是为了完成特定功能的SQL语句集。优点存储过程可以理解为shell脚本这类型的命令集输出工具,但是在底层,存储过程拥有更多的优点:语言的灵活性跟功能性更强,在原有基础之上可以插入控制语句、循环语句等让SQL语句的功能更强,能够完成更复杂的......
  • Oracle行级触发器的使用
    Oracle行级触发器的使用1、创建触发器并使用dblink在插入时进行数据同步异库异表同步createorreplacetriggertriggerName--触发器名称afterinsertontableName--操作的表foreachrow——行级触发器declare--这里是关键的地方,在变量申明的地方,指定自定义事务处......
  • RS触发器竞争现象
    S=R=1时,Q=非Q=0。如果此刻S,R突然变化=0,因为变0的过程有先有后,假设S先变为0,即有S=0,Q=0,得到输出非Q=1。如果是R先变成0,有R=0,非Q=0,即输出Q=1。Q的状态不稳定,Q的状态取决于谁先变为0...所以这是不允许出现的情况,因为你并不知道你的Q是什么状态。情况1:R=0和S=0在第一种情况下,两个......
  • Quartz.Net间隔N周/日/年定时触发器写法总结
    由于近日在定时器中对特殊的规则(既不能通过表达式直接体现的)的用法初步汇总:本次使用的Quartz.Net的版本号:2.61.触发器测试验证publicclassTestQuartz{///<summary>///间隔N周定时触发器写法测试///</summary>publicstatic......