-
2020-09-15 09:08:51
CREATE TRIGGER trigger_name 【BEFORE | AFTER】【INSERT | DELETE | UPDATEON】 ON table_name FOR EACH ROW BEGIN trigger_stmt END; trigger_name:触发器的名称 BEFORE或者AFTER, 为触发时机 INSERT、DELETE或者UPDATE, 为触发事件 table_name :表示建立触发器的表明,就是在哪张表上建立触发器 trigger_stmt:触发器的程序体,可以是一条SQL语句或者是用BEGIN和END包含的多条语句
多条语句:
CREATE TRIGGER trigger_name AFTER INSERT ON table_name FOR EACH ROW BEGIN DECLARE s1 VARCHAR(40)character set utf8; DECLARE s2 VARCHAR(20) character set utf8;#后面发现中文字符编码出现乱码,这里设置字符集 SET s1= " is created"; SET s2 = CONCAT(NEW.name,s2); #函数CONCAT可以将字符串连接 INSERT INTO logs(log) values(s1);
在navicat中需要在首尾添加delimiter
delimiter $$ CREATE TRIGGER trigger_name BEFORE INSERT ON table_name for each row BEGIN set new.created_date = now(); END; $$
更多相关内容 -
MySQL中,创建触发器
2021-03-23 20:19:35在MySQL中,创建触发器语法如下: CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt 其中: trigger_name:标识触发器名称,用户自行指定; trigger_time:标识触发...在MySQL中,创建触发器语法如下:
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 包含的多条语句,每条语句结束要分号结尾。【NEW 与 OLD 详解】
MySQL 中定义了 NEW 和 OLD,用来表示 触发器的所在表中,触发了触发器的那一行数据。 具体地: 在 INSERT 型触发器中,NEW 用来表示将要(BEFORE)或已经(AFTER)插入的新数据; 在 UPDATE 型触发器中,OLD 用来表示将要或已经被修改的原数据,NEW 用来表示将要或已经修改为的新数据; 在 DELETE 型触发器中,OLD 用来表示将要或已经被删除的原数据; 使用方法: NEW.columnName (columnName 为相应数据表某一列名)
create trigger audit_log after insert on employees_test for each row begin insert into audit values(new.id,new.name); end
-
mysql创建触发器的创建、查看、删除
2022-02-18 09:10:36文章目录1 触发器的概念2 触发器的创建2.1 语法2.2 举例3 查看、删除触发器3.1 查看3.2 删除触发器4 优缺点4.1 优点4.2 缺点5 注意点 1 触发器的概念 触发器是由事件来触发某个操作,这些事件包括INSERT、UPDATE、...1 触发器的概念
- 触发器是由事件来触发某个操作,这些事件包括INSERT、UPDATE、DELETE事件。
- 所谓事件就是指用户的动作或者触发某项行为。如果定义了触发程序,当数据库执行这些语句时候,就相当于事件发生了,就会自动激发触发器执行相应的操作。
- 当对数据表中的数据执行插入、更新和删除操作,需要自动执行一些数据库逻辑时,可以使用触发器来实现。
2 触发器的创建
2.1 语法
CREATE TRIGGER 触发器名称 {BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON 表名 FOR EACH ROW 触发器执行的语句块;
2.2 举例
CREATE DATABASE trigger_test; USE trigger_test; CREATE TABLE test_trigger ( id INT PRIMARY KEY AUTO_INCREMENT, t_note VARCHAR ( 30 ) ); CREATE TABLE test_trigger_log ( id INT PRIMARY KEY AUTO_INCREMENT, t_log VARCHAR ( 30 ) ); #举例1 #创建触发器 #创建名称为before_insert_test_tri的触发器,向test_trigger数据表插入数据之前,向test_trigger_log数据表中插入before_insert的日志信息。 CREATE TRIGGER before_insert_test_tri BEFORE INSERT ON test_trigger FOR EACH ROW BEGIN INSERT INTO test_trigger_log ( t_log ) VALUES ( 'before insert...' ); END; #测试 INSERT INTO test_trigger ( t_note ) VALUES ( 'test' ); #查询 SELECT * FROM test_trigger; SELECT * FROM test_trigger_log; #举例2 #创建名称为after_insert_test_tri的触发器,向test_trigger数据表插入数据之后,向test_triggerIog数据表中插入after insert的日志信息。 CREATE TRIGGER after_insert_test_tri AFTER INSERT ON test_trigger FOR EACH ROW BEGIN INSERT INTO test_trigger_log ( t_log ) VALUES ( 'after insert' ); END; #测试 INSERT INTO test_trigger ( t_note ) VALUES ( 'test2' ); #查询 SELECT * FROM test_trigger; SELECT * FROM test_trigger_log; #举例3: #定义触发器“salarycheck_trigger",基于员工表“employees"的INSERT事件,在INSERT之前检查将要添加的新员工薪资是否大于他领导的薪资,如果大于领导薪资,则报sqlstate_value为'HY000'的错误,从而使得添加失败。 CREATE TRIGGER salary_check_trigger BEFORE INSERT ON employees FOR EACH ROW BEGIN DECLARE manager_sal DOUBLE;#领导工资 #查询到要添加的数据的manager的薪资 SELECT salary INTO manager_sal FROM employees WHERE employee_id = NEW.manager_id ;#new代表当前插入的数据 IF NEW.salary > manager_sal THEN SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = '薪资高于领导错误'; END IF; END; #测试 1644 - 薪资高于领导错误 INSERT INTO employees( employee_id, last_name, email, hire_date, job_id, salary, manager_id ) VALUES ( 300, 'Tom', 'tom@126.com', CURDATE(), 'AD_VP', 150000, 103 );
3 查看、删除触发器
3.1 查看
#方式一:查看所有触发器 SHOW TRIGGERS; #方式二:查看指定触发器 SHOW CREATE TRIGGER salary_check_trigger; #方式三:从系统库中查看 SELECT * FROM information_schema.`TRIGGERS`;
3.2 删除触发器
#删除 DROP TRIGGER before_insert_test_tri;
4 new与old
- 当使用insert语句的时候,要插入的数据就是new。
- 当使用delete语句的时候,要删除的那一条数据就是old。
- 当使用update语句的时候,被修改的旧数据就是old,要修改为的新数据就是new。
5 优缺点
5.1 优点
- 触发器可以确保数据的完整性。
- 触发器可以帮助我们记录操作日志。
- 触发器还可以用在操作数据前,对数据进行合法性检查。
5.2 缺点
- 触发器最大的一个问题就是可读性差(A表插入数据时报B表插入数据错误)。
- 相关数据的变更,可能会导致触发器出错。
6 注意点
注意,如果在子表中定义了外键约束,并且外键指定了ON UPDATE/DELETE CASCADE/SET NULL子句,此时修改父表被引用的键值或删除父表被引用的记录行时,也会引起子表的修改和删除操作,此时基于子表的UPDATE和DELETE语句定义的触发器并不会被激活。
-
mysql 创建触发器(for each row解释)
2021-06-04 10:42:36-- 创建触发器名称 create trigger tri_stuInsert -- 触发时机 (BEFORE 或 AFTER) after -- 触发事件(INSERT、UPDATE 或 DELETE) insert -- 建立触发器的表名,即在哪张表上建立触发器 on student -- 是指行级...说明:这里只是一个简单的示例。
假设系统中有两个表:
班级表 class(班级号 class_id, 班内学生数 stu_count)
学生表 student(学号 stu_id, 所属班级号 class_id)准备数据:
班级表中有 一个班级1 class_id:1,stu_count:2。
学生表中有 两个学生 stu_id:1,class_id:1;stu_id:2,class_id:1;分别关联到班级1;
需求:学生表每增加一个学生,所对应班级表中的班级学生数量增加1。上才艺:
-- 创建触发器名称 create trigger update_stuCount -- 触发时机 (BEFORE 或 AFTER) after -- 触发事件(INSERT、UPDATE 或 DELETE) insert -- 建立触发器的表名,即在哪张表上建立触发器 on student -- 是指行级触发,对于受触发事件影响的每一行都要激活触发器的动作 for each row -- 触发器程序体,可以是一句SQL语句,或者用 BEGIN 和 END 包含的多条语句。 begin -- 定义变量: 学生数量 declare count int; -- 查询 班级表 学生数量 (根据 学生表新插入学生数据的班级id 进行查询) 并 将查询出的学生数量 赋值给 变量 count -- new.class_id 为学生表中 插入数据的 class_id set count = (select stu_count from class where class_id = new.class_id); -- 更新 班级表 学生数量字段值 (学生表每插入一条则 将班级原始学生数量加1) 根据 学生表新插入数据的班级id进行更新 -- new.classID 为学生表中 插入数据的 classID update class set stu_count = count + 1 where class_id = new.class_id; end
for each row :是指每行受影响,触发器都执行,叫行级触发器。oracle触发器中分行级触发器和语句级触发器,可不写for each row,无论影响多少行都只执行一次。mysql不支持语句触发器,所以必须写for each row;
修改和删除:若要修改触发器可以先删除 后创建
注意:删除一个表的同时,也会自动删除该表上的触发器。另外,触发器不能更新或覆盖,为了修改一个触发器,必须先删除它,再重新创建。
-- 删除:drop trigger update_stuCount
-- 创建:create trigger update_stuCount -
MySQL 创建触发器
2020-03-14 09:47:01触发器是与 MySQL 数据表...在 MySQL 5.7 中,可以使用 CREATE TRIGGER 语句创建触发器。 语法格式如下: CREATE <触发器名> < BEFORE | AFTER > <INSERT | UPDATE | DELETE > ON <表名> ... -
mysql创建触发器
2022-04-18 15:56:49触发器分为 for each row(作用在每行)和 for each statement(作用在每条语句),这二者的区别的就是当一条语句使得多条记录发生改变时,前者会触发多次触发器,而后者只会触发一次。 1.2 触发事件的分类 触发事件,... -
mysql—创建触发器
2021-12-13 16:07:05语法格式如下: CREATE <触发器名> < BEFORE | AFTER > <INSERT | UPDATE | DELETE > ON <...触发事件,用于指定激活触发器的语句的种类。 注意:三种触发器的执行时间如下。 -
Mysql中的触发器简单介绍及使用案例
2020-12-15 03:40:36两部分组成: 触发器事件发生的时间—–是在监听的表的行为 after before 常用的是after 触发器执行的内容:增删改 创建order 表的时候,需要注意,因为order在mysql中是一个关键字排序,为了避免错误的发生,我们... -
mysql触发器之创建使用触发器简单示例
2020-12-15 01:46:24本文实例讲述了mysql触发器之创建使用触发器。分享给大家供大家参考,具体如下: 我们可以可以使用CREATE TRIGGER语句创建一个新的触发器,来看下具体的语法: CREATE TRIGGER trigger_name trigger_time trigger_... -
MySQL-创建触发器(trigger)
2021-09-16 09:52:56在MySQL中,创建触发器语法如下: CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt 其中: trigger_name:标识触发器名称,用户自行指定; trigger_time:标识... -
创建MySQL的触发器
2022-04-07 18:27:36在MySQL中,创建触发器语法如下: CREATE TRIGGER trigger_nametrigger_time trigger_event ON tbl_name FOR EACH ROWtrigger_stmt 其中: trigger_name:标识触发器名称,用户自行指定; trigger_time:标识触发... -
mysql创建触发器时报1064错误
2019-12-15 23:12:261.这里有两张表,book和enterbook,book表中的bookid是enterbook的外键,这里想创建一个insert触发器,...2.通常百度的mysql创建触发器的语句是这样的, CREATE TRIGGER 触发器名 BEFORE (AFTER) 触发事... -
MySQL(触发器的创建和使用)
2018-07-06 14:31:30触发器(TRIGGER)是MySQL的数据库对象之一,从5.0.2版本开始支持。该对象与编程语言中的函数非常类似,都需要声明、执行等。但是触发器的执行不是由程序调用,也不是由手工启动,而是由事件来触发、激活从而实现... -
mysql创建触发器问题
2021-01-27 04:56:44你的位置:问答吧->... 问题详情mysql创建触发器问题我想在mysql上创建一个触发器,原代码如下CREATE TRIGGER comment_afterdelete_on_mynewbefore DELETE ON tb1_mynewFOR EACH ROWBEGINselect * from... -
mysql触发器简介、创建触发器及使用限制分析
2020-12-15 01:41:22本文实例讲述了mysql触发器简介、创建触发器及使用限制。分享给大家供大家参考,具体如下: 简介 SQL触发器是存储在数据库目录中的一组SQL语句。每当与表相关联的事件发生时,即会执行或触发SQL触发器,例如插入,... -
mysql触发器之创建多个触发器操作实例分析
2020-12-15 01:40:14本文实例讲述了mysql触发器之创建多个触发器操作。分享给大家供大家参考,具体如下: 这次记录的内容mysql 版本必须得是5.7.2+的哈,之前的会不好使的。废话不多说,咱们开始正文哈。 在mysql 5.7.2+版本之前,我们... -
MySQL创建触发器遇到的问题
2021-04-08 10:25:14创建触发器的语句和报错信息 问题原因和解决方案: 仔细检查很久,并没有发现创建触发器的语句有什么问题。然后去MySQL官网查看,看到这段说明: 如官网这段文字所述,使用BEGIN … END构造,如果使用mysql程序... -
MySQL实验八 创建触发器
2021-06-12 18:22:39MySQL实验八 创建触发器 一、实验环境: Win 10 mysql8.2 二、实验内容与完成情况: -- 3.1 创建触发器 -- (1) 使用 MySQL 命令行或者 workbench(或者 Navicat for MySQL)为员工医疗 -- 保险系统(实验 03 创建的 7... -
Mysql-触发器及创建触发器失败原因
2020-05-10 16:25:56触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。 触发器的特性: 1、有begin end体,begin end;之间的语句可以写的简单或者复杂 2、什么条件会触发:I、D、U 3... -
mysql 创建触发器 delimiter使用
2021-02-01 18:36:411、创建触发器:语法:CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_nameFOR EACH ROWBEGINtrigger_stmtEND;大写的为关键字trigger_name:触发器的名字,我常用的命名规则t_name_tableName_(b|a)(i... -
MySQL8.0创建触发器
2021-12-05 07:59:56在测试中发现添加了referencing new row as newtuple 语句后会出现42000的报错,在查看mysql8.0官方文档后作出改进,代码如下所示: delimiter // create trigger xxx before insert on xx for each statement ... -
mysql 触发器用法实例详解
2021-01-19 22:54:32MySQL触发器语法详解: 触发器 trigger是一种特殊的存储过程,他在插入(inset)、删除(delete)或修改(update)特定表中的数据时触发执行,它比数据本身标准的功能更精细和更复杂的数据控制能力。触发器不是由... -
mysql中触发器使用详解.docx
2021-06-23 14:44:44触发器是与表有关的数据库对象,在对表进行insert/update/delete之前或之后,会触发并执行触发器中定义的SQL语句。触发器的这种特性可以协助应用在数据库端确保数据的完整性,记录日志,校验数据等。 -
MySql的触发器
2021-01-28 01:54:21在MySQL中,创建只有一个执行语句的触发器的基本形式如下:CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件ON 表名 FOR EACH ROW 执行语句具体的参数说明如下:触发器名:指定要创建的触发器名字。参数BEFORE和AFTER... -
Mysql创建触发器实现不同表的插入、更新、删除操作
2021-01-18 20:03:00Mysql 触发器的插入、更新、删除操作。在这里建了两个表:其中这两个表的结构不一样,这里给表admin建立触发器在对表admin操作的同时,触发数据库的触发器,同时操作表users。1.创建表:create table admin(id int,... -
mysql 触发器 if语句用法
2021-01-18 19:31:54BEGINDECLAREi_jcidVARCHAR(50);DECLAREi_jkcxVARCHAR(50);DECLAREi_jksjVARCHAR(50);DECLAREi_resultVARCHAR(100)default... END if语句应该怎么写,哪位大神给指导一下,在线等,我上面这样写是有问题的,求指导 展开 -
mysql中查询触发器的语句
2020-07-23 18:02:52mysql> select * from information_schema.triggers where trigger_name = trigger_6; 为何老是报告错误,原因在于trigger_6是一个“值”,所以必须要加上引号。 -
navicat for mysql 创建触发器
2017-05-24 10:23:321、创建两个表, t_1和t_2,两个表结构一样 2、要实现的效果是在t_1插入数据的时候,t_2也会同时插入该数据,选中t_1==>"设计表"==》"触发器" 在“”定义“”的里面写插入t_2的sql,保存。 3、查看...