精华内容
下载资源
问答
  • MySQL创建触发器
    千次阅读
    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
    
    展开全文
  • 文章目录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 <...触发事件,用于指定激活触发器语句的种类。 注意:三种触发器的执行时间如下。
  • 两部分组成: 触发器事件发生的时间—–是在监听的表的行为 after before 常用的是after 触发器执行的内容:增删改 创建order 表的时候,需要注意,因为order在mysql中是一个关键字排序,为了避免错误的发生,我们...
  • 本文实例讲述了mysql触发器之创建使用触发器。分享给大家供大家参考,具体如下: 我们可以可以使用CREATE TRIGGER语句创建一个新的触发器,来看下具体的语法: CREATE TRIGGER trigger_name trigger_time trigger_...
  • 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:26
    1.这里有两张表,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触发器简介、创建触发器及使用限制。分享给大家供大家参考,具体如下: 简介 SQL触发器是存储在数据库目录中的一组SQL语句。每当与表相关联的事件发生时,即会执行或触发SQL触发器,例如插入,...
  • 本文实例讲述了mysql触发器创建多个触发器操作。分享给大家供大家参考,具体如下: 这次记录的内容mysql 版本必须得是5.7.2+的哈,之前的会不好使的。废话不多说,咱们开始正文哈。 在mysql 5.7.2+版本之前,我们...
  • 创建触发器语句和报错信息 问题原因和解决方案: 仔细检查很久,并没有发现创建触发器语句有什么问题。然后去MySQL官网查看,看到这段说明: 如官网这段文字所述,使用BEGIN … END构造,如果使用mysql程序...
  • MySQL实验八 创建触发器

    千次阅读 2021-06-12 18:22:39
    MySQL实验八 创建触发器 一、实验环境: 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...
  • 1、创建触发器:语法: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触发器语法详解:  触发器 trigger是一种特殊的存储过程,他在插入(inset)、删除(delete)或修改(update)特定表中的数据时触发执行,它比数据本身标准的功能更精细和更复杂的数据控制能力。触发器不是由...
  • 触发器是与表有关的数据库对象,在对表进行insert/update/delete之前或之后,会触发并执行触发器中定义的SQL语句触发器的这种特性可以协助应用在数据库端确保数据的完整性,记录日志,校验数据等。
  • MySql触发器

    2021-01-28 01:54:21
    MySQL中,创建只有一个执行语句触发器的基本形式如下:CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件ON 表名 FOR EACH ROW 执行语句具体的参数说明如下:触发器名:指定要创建触发器名字。参数BEFORE和AFTER...
  • Mysql 触发器的插入、更新、删除操作。在这里建了两个表:其中这两个表的结构不一样,这里给表admin建立触发器在对表admin操作的同时,触发数据库的触发器,同时操作表users。1.创建表:create table admin(id int,...
  • mysql 触发器 if语句用法

    千次阅读 2021-01-18 19:31:54
    BEGINDECLAREi_jcidVARCHAR(50);DECLAREi_jkcxVARCHAR(50);DECLAREi_jksjVARCHAR(50);DECLAREi_resultVARCHAR(100)default... END if语句应该怎么写,哪位大神给指导一下,在线等,我上面这样写是有问题的,求指导 展开
  • mysql中查询触发器语句

    千次阅读 2020-07-23 18:02:52
    mysql> select * from information_schema.triggers where trigger_name = trigger_6; 为何老是报告错误,原因在于trigger_6是一个“值”,所以必须要加上引号。
  • navicat for mysql 创建触发器

    万次阅读 2017-05-24 10:23:32
    1、创建两个表, t_1和t_2,两个表结构一样 2、要实现的效果是在t_1插入数据的时候,t_2也会同时插入该数据,选中t_1==>"设计表"==》"触发器" 在“”定义“”的里面写插入t_2的sql,保存。 3、查看...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 55,382
精华内容 22,152
关键字:

mysql创建触发器语句

mysql 订阅