精华内容
下载资源
问答
  • 2019-05-29 16:20:50
    use dorm;
    delimiter $$
    create trigger student_score_red
    	after  insert on grade
        for each row
        begin
    		declare s float;
            set s = new.score;
            if(s < 90) then
    			update student 
                set student.score = student.score - 1
                where student.Sbno = new.gbno and student.Sdno = new.gbno;
    		end if;
    	end
        $$

     

    更多相关内容
  • mysql触发器实例

    2018-01-12 16:46:10
    内含mysql的trigger触发器实例,修改即可使用。。。。。。
  • MySQL数据库教程之十五:MySQL触发器实例 准备工作: 先启动Navicat for MySQL,建立数据库 建立两个表:Goods(商品表)、Orders(订单表) Goods(商品表) create table Goods ( gid char(8) not null primary...
  • MySQL触发器语法详解:  触发器 trigger是一种特殊的存储过程,他在插入(inset)、删除(delete)或修改(update)特定表中的数据时触发执行,它比数据本身标准的功能更精细和更复杂的数据控制能力。触发器不是由...
  • MySQL 触发器简单实例 语法 CREATE TRIGGER <触发器名称> –触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象. { BEFORE | AFTER } –触发器有执行的时间设置:...
  • mysql触发器实例说明

    千次阅读 2021-01-19 15:15:26
    触发器是一类特殊的事务 ,可以监视某种数据操作(insert/update/delete),并触发相关操作(insert/update/delete)。看以下事件:完成下单与减少库存的逻辑Insert into o (gid,num) values (2,3); // 插入语句Update g ...

    触发器是一类特殊的事务 ,可以监视某种数据操作(insert/update/delete),并触发相关操作(insert/update/delete)。

    5ecd0aa0db8bb51da55d6bf3d20a1f18.png

    看以下事件:

    6c89018e4106230cd786a1d7a8caf58d.png

    完成下单与减少库存的逻辑

    Insert into o (gid,num) values (2,3); // 插入语句

    Update g set goods_num = goods_num - 3 where id = 2;// 更新过程

    这两个逻辑可以看成一个整体,或者说, insert ---> 引来 update

    用触发器可以解决上述问题.

    我们可以监视某表的变化,当发生某种变化时,触发某个操作.

    57d1975159cca9d8c17cd9ae56d4092d.png

    创建触发器的语法

    Create trigger triggerName

    After/before insert/update/delete on 表名

    For each row #这句话是固定的

    Begin

    Sql语句; # 一句或多句,insert/update/delete范围内

    End;

    删除触发器的语法:

    Drop trigger 触发器名

    查看触发器

    Show triggers

    133325af8465791b415d1cc61a47bdfd.png

    如何在触发器引用行的值

    对于insert而言, 新增的行 用new 来表示,

    行中的每一列的值 ,用new.列名来表示.

    对于 delete来说, 原本有一行,后来被删除,

    想引用被删除的这一行,用old,来表示, old.列名,就可以引用被删行中的值.

    对于update来说,

    被修改的行,

    修改前的数据 ,用 old来表示, old.列名引用被修改之前行中的值

    修改后的数据,用new 来表示, new.列名引用被修改之后行中的值

    0c02b8f386225aee5d24aad3f50a4d02.png

    80f9f6323d2eca7b8d7bd2381bb1f06c.png

    触发器里after 和before的区别

    After 是先完成数据的增,删,改再触发,

    触发的语句晚于监视的增,删,改,无法影响前面的增删改动作.

    Before是先完成触发,再增删改,

    触发的语句先于监视的增,删,改发生,我们有机会判断,修改即将发生的操作.

    典型案例:

    对于所下订单,进行判断,如果订单的数量 > 5 ,就认为是恶意订单,

    强制把所订的商品数量改成5

    0c9c66a53af163d2ea51e92e83ed1709.png

    查看哪些触发器:

    14be54a509e45158ae7e7b9a19ccde82.png

    b5c511b588ec1556bc4d395e16cc5b81.png

    展开全文
  • mysql 触发器实例

    2021-03-16 13:36:07
    insert触发器 表test新增记录后,将type值为“1”的记录同时插入到test_hisy表中(AFTER INSERT:录入后触发, BEFORE INSERT:录入前触发) DELIMITER // DROP TRIGGER IF EXISTS t_after_insert_test// CREATE ...

    测试表1

    DROP TABLE IF EXISTS test;

    CREATE TABLE test (

    id bigint(11) unsigned NOT NULL AUTO_INCREMENT,

    name varchar(100) NOT NULL DEFAULT '',

    type varchar(100),

    create_time datetime,

    PRIMARY KEY (ID)

    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

    测试表2

    DROP TABLE IF EXISTS test_hisy;

    CREATE TABLE test_hisy (

    id bigint(11) unsigned NOT NULL AUTO_INCREMENT,

    name varchar(100) NOT NULL DEFAULT '',

    type varchar(100),

    create_time datetime,

    operation varchar(100) COMMENT '操作类型',

    PRIMARY KEY (ID)

    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

    insert触发器

    表test新增记录后,将type值为“1”的记录同时插入到test_hisy表中(AFTER INSERT:录入后触发, BEFORE INSERT:录入前触发)

    DELIMITER //

    DROP TRIGGER IF EXISTS t_after_insert_test//

    CREATE TRIGGER t_after_insert_test

    AFTER INSERT ON test

    FOR EACH ROW

    BEGIN

    IF new.type='1' THEN

    insert into test_hisy(name, type, create_time, operation)

    values(new.name, new.type, new.create_time, 'insert');

    END IF;

    END;//

    update触发器

    表test修改时,若type值为“2”则将修改前的记录同时插入到test_hisy表中(AFTER UPDATE:修改后触发, BEFORE UPDATE:修改前触发)

    DELIMITER //

    DROP TRIGGER IF EXISTS t_before_update_test//

    CREATE TRIGGER t_before_update_test

    BEFORE UPDATE ON test

    FOR EACH ROW

    BEGIN

    IF new.type='2' THEN

    insert into test_hisy(name, type, create_time, operation)

    values(old.name, old.type, old.create_time, 'update');

    END IF;

    END;//

    delete触发器

    表test删除记录前,将删除的记录录入到表test_hisy中(AFTER DELETE:删除后触发, BEFORE DELETE:删除前触发)

    DELIMITER //

    DROP TRIGGER IF EXISTS t_before_delete_test//

    CREATE TRIGGER t_before_delete_test

    BEFORE DELETE ON test

    FOR EACH ROW

    BEGIN

    insert into test_hisy(name, type, create_time, operation)

    values(old.name, old.type, old.create_time, 'delete');

    END;//

    注:

    以上触发器例子中出现的new为修改后的数据, old为修改前的数据

    展开全文
  • mysql触发器的例子,如下:mysql> CREATE TABLE Employee(-> id int,-> first_name VARCHAR(15),-> last_name VARCHAR(15),-> start_date DATE,-> end_date ...

    mysql触发器的例子,如下:

    mysql> CREATE TABLE Employee(

    -> id int,

    -> first_name VARCHAR(15),

    -> last_name VARCHAR(15),

    -> start_date DATE,

    -> end_date DATE,

    -> salary FLOAT(8,2),

    -> city VARCHAR(10),

    -> description VARCHAR(15)

    -> );

    Query OK, 0 rows affected (0.03 sec)

    mysql> insert into Employee(id,first_name, last_name, start_date, end_Date, salary, City, Description)

    -> values (1,'Jason', 'Martin', '19960725', '20060725', 1234.56, 'Toronto', 'Programmer');

    Query OK, 1 row affected (0.02 sec)

    mysql>

    mysql> insert into Employee(id,first_name, last_name, start_date, end_Date, salary, City, Description)

    -> values(2,'Alison', 'Mathews', '19760321', '19860221', 6661.78, 'Vancouver','Tester');

    Query OK, 1 row affected (0.00 sec)

    mysql>

    mysql> insert into Employee(id,first_name, last_name, start_date, end_Date, salary, City, Description)

    -> values(3,'James', 'Smith', '19781212', '19900315', 6544.78, 'Vancouver','Tester');

    Query OK, 1 row affected (0.00 sec)

    mysql>

    mysql> insert into Employee(id,first_name, last_name, start_date, end_Date, salary, City, Description)

    -> values(4,'Celia', 'Rice', '19821024', '19990421', 2344.78, 'Vancouver','Manager');

    Query OK, 1 row affected (0.00 sec)

    mysql>

    mysql> insert into Employee(id,first_name, last_name, start_date, end_Date, salary, City, Description)

    -> values(5,'Robert', 'Black', '19840115', '19980808', 2334.78, 'Vancouver','Tester');

    Query OK, 1 row affected (0.00 sec)

    mysql>

    mysql> insert into Employee(id,first_name, last_name, start_date, end_Date, salary, City, Description)

    -> values(6,'Linda', 'Green', '19870730', '19960104', 4322.78,'New York', 'Tester');

    Query OK, 1 row affected (0.00 sec)

    mysql>

    mysql> insert into Employee(id,first_name, last_name, start_date, end_Date, salary, City, Description)

    -> values(7,'David', 'Larry', '19901231', '19980212', 7897.78,'New York', 'Manager');

    Query OK, 1 row affected (0.00 sec)

    mysql>

    mysql> insert into Employee(id,first_name, last_name, start_date, end_Date, salary, City, Description)

    -> values(8,'James', 'Cat', '19960917', '20020415', 1232.78,'Vancouver', 'Tester');

    Query OK, 1 row affected (0.01 sec)

    mysql>

    mysql> select * from Employee;

    +------+------------+-----------+------------+------------+---------+-----------+-------------+

    | id | first_name | last_name | start_date | end_date | salary | city | description |

    +------+------------+-----------+------------+------------+---------+-----------+-------------+

    | 1 | Jason | Martin | 1996-07-25 | 2006-07-25 | 1234.56 | Toronto | Programmer |

    | 2 | Alison | Mathews | 1976-03-21 | 1986-02-21 | 6661.78 | Vancouver | Tester |

    | 3 | James | Smith | 1978-12-12 | 1990-03-15 | 6544.78 | Vancouver | Tester |

    | 4 | Celia | Rice | 1982-10-24 | 1999-04-21 | 2344.78 | Vancouver | Manager |

    | 5 | Robert | Black | 1984-01-15 | 1998-08-08 | 2334.78 | Vancouver | Tester |

    | 6 | Linda | Green | 1987-07-30 | 1996-01-04 | 4322.78 | New York | Tester |

    | 7 | David | Larry | 1990-12-31 | 1998-02-12 | 7897.78 | New York | Manager |

    | 8 | James | Cat | 1996-09-17 | 2002-04-15 | 1232.78 | Vancouver | Tester |

    +------+------------+-----------+------------+------------+---------+-----------+-------------+

    8 rows in set (0.00 sec)

    mysql> DELIMITER //

    mysql>

    mysql> CREATE TRIGGER myTrigger BEFORE UPDATE ON employee //创建mysql触发器

    -> FOR EACH ROW

    -> BEGIN

    ->

    -> IF NEW.id > 5 THEN

    -> SET NEW.first_name = NEW.first_name+ " *";

    -> END IF;

    ->

    -> IF NEW.salary IS NULL OR NEW.salary = 0 THEN

    -> SET NEW.salary = 100;

    -> ELSE

    -> SET NEW.salary = NEW.salary + 100;

    -> END IF;

    ->

    -> END

    ->

    -> //

    Query OK, 0 rows affected (0.00 sec)

    mysql> DELIMITER ;

    mysql>

    mysql> update employee set id = 6, first_name= 'new', salary = null; //更新数据

    Query OK, 8 rows affected, 8 warnings (0.00 sec)

    Rows matched: 8 Changed: 8 Warnings: 0

    mysql>

    mysql> select * from employee;

    +------+------------+-----------+------------+------------+--------+-----------+-------------+

    | id | first_name | last_name | start_date | end_date | salary | city | description |

    +------+------------+-----------+------------+------------+--------+-----------+-------------+

    | 6 | 0 | Martin | 1996-07-25 | 2006-07-25 | 100.00 | Toronto | Programmer |

    | 6 | 0 | Mathews | 1976-03-21 | 1986-02-21 | 100.00 | Vancouver | Tester |

    | 6 | 0 | Smith | 1978-12-12 | 1990-03-15 | 100.00 | Vancouver | Tester |

    | 6 | 0 | Rice | 1982-10-24 | 1999-04-21 | 100.00 | Vancouver | Manager |

    | 6 | 0 | Black | 1984-01-15 | 1998-08-08 | 100.00 | Vancouver | Tester |

    | 6 | 0 | Green | 1987-07-30 | 1996-01-04 | 100.00 | New York | Tester |

    | 6 | 0 | Larry | 1990-12-31 | 1998-02-12 | 100.00 | New York | Manager |

    | 6 | 0 | Cat | 1996-09-17 | 2002-04-15 | 100.00 | Vancouver | Tester |

    +------+------------+-----------+------------+------------+--------+-----------+-------------+

    8 rows in set (0.00 sec)

    mysql>

    mysql> update employee set id = 7, first_name= 'new', salary = 100; //更新数据

    Query OK, 8 rows affected, 8 warnings (0.00 sec)

    Rows matched: 8 Changed: 8 Warnings: 0

    mysql>

    mysql> select * from employee;

    +------+------------+-----------+------------+------------+--------+-----------+-------------+

    | id | first_name | last_name | start_date | end_date | salary | city | description |

    +------+------------+-----------+------------+------------+--------+-----------+-------------+

    | 7 | 0 | Martin | 1996-07-25 | 2006-07-25 | 200.00 | Toronto | Programmer |

    | 7 | 0 | Mathews | 1976-03-21 | 1986-02-21 | 200.00 | Vancouver | Tester |

    | 7 | 0 | Smith | 1978-12-12 | 1990-03-15 | 200.00 | Vancouver | Tester |

    | 7 | 0 | Rice | 1982-10-24 | 1999-04-21 | 200.00 | Vancouver | Manager |

    | 7 | 0 | Black | 1984-01-15 | 1998-08-08 | 200.00 | Vancouver | Tester |

    | 7 | 0 | Green | 1987-07-30 | 1996-01-04 | 200.00 | New York | Tester |

    | 7 | 0 | Larry | 1990-12-31 | 1998-02-12 | 200.00 | New York | Manager |

    | 7 | 0 | Cat | 1996-09-17 | 2002-04-15 | 200.00 | Vancouver | Tester |

    +------+------------+-----------+------------+------------+--------+-----------+-------------+

    8 rows in set (0.00 sec)

    mysql> drop table Employee;

    Query OK, 0 rows affected (0.02 sec)

    展开全文
  • mysql触发器实例之更新前触发,代码如下:mysql> CREATE TABLE Employee( //创建数据表-> id int,-> first_name VARCHAR(15),-> last_name VARCHAR(15),-> start_date DATE,-> ...
  • mysql触发器的例子,插入数据前更新数据的值,代码如下:mysql> CREATE TABLE Employee(-> id int,-> first_name VARCHAR(15),-> last_name VARCHAR(15),-> start_date DATE,-> ...
  • mysql中使用触发器实例-函数、事件、定时器 event_scheduler、PROCEDURE 的使用
  • 本文实例讲述了mysql触发器之创建多个触发器操作。分享给大家供大家参考,具体如下: 这次记录的内容mysql 版本必须得是5.7.2+的哈,之前的会不好使的。废话不多说,咱们开始正文哈。 在mysql 5.7.2+版本之前,我们...
  • mysql触发器的例子,代码如下:mysql> CREATE TABLE Employee( //创建表-> id int,-> first_name VARCHAR(15),-> last_name VARCHAR(15),-> start_date DATE,-> end_da...
  • 本节内容:mysql触发器实例例1,复制代码 代码示例:delimiter //create trigger InsertUserbefore insert on userfor each rowBegininsert into user_group(uid,gid) values(new.uid,'group4444444444');end;//...
  • 分享mysql触发器的例子,代码如下:mysql> CREATE TABLE test (id SERIAL, percent DOUBLE);Query OK, 0 rows affected (0.00 sec)mysql>mysql> DELIMITER $$mysql>mysql> CREATE TRIGGER test_...
  • mysql触发器实例一则

    2021-02-10 13:11:10
    例子,实例学习mysql触发器的用法。一,准备二张测试表:1,测试表1复制代码 代码示例:DROP TABLE IF EXISTS test;CREATE TABLE test (id bigint(11) unsigned NOT NULL AUTO_INCREMENT,name varchar(100) NOT NULL ...
  • 主要介绍了mysql触发器(Trigger)简明总结和使用实例,需要的朋友可以参考下
  • 主要介绍了MySQL 触发器定义与用法,结合简单实例形式总结分析了mysql触发器的语法、原理、定义及使用方法,需要的朋友可以参考下
  • MySQL触发器实例(记录触发器)

    千次阅读 2017-11-20 16:38:17
    MySQL:记录触发器 1:概述 1:不管触发器是否触发,只要当某种操作准备执行,系统就会将当期要操作的记录的当期状态和即将执行之后新的状态分别保留下来,提供给触发器使用,其中,要操作当期状态保存到old中,操作...
  • MySql触发器讲解及使用案例

    千次阅读 2022-04-09 14:10:11
    1.什么是触发器 触发器(trigger):监视某种情况,并进行某种操作,它的执行并不是程序调用,也不是手工启动,而是由事件来触发,例如:对一张表进行操作(插入,更新,删除)时,就会触发执行事先编辑好的若干条SQL...
  • MySQL触发器示例

    2021-01-21 02:56:53
    触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。创建触发器CREATE TRIGGER trigger_name trigger_time trigger_...
  • mysql触发器使用案例

    2021-08-02 13:29:04
    1.触发器的基本概念 触发器是一种特殊的存储过程,但是它又不同于存储过程.因为它主要是通过事件被触发而执行,不同于存储过程需要主动调用存储过程的名字进行执行 2.触发器的基本语法 CREATE TRIGGER <trigger...
  • Mysql触发器实例分析

    2021-01-28 07:13:59
    所谓触发器,就是在定义在表对象上。当触发器所在的表出现指定的事件时,会触发对应表的delete update insert的操作。说的有点绕口,其实就是到监视某种情况,然后去触发某种操作。触发器是如何来进行定义的呢?在...
  • 主要介绍了MySQL触发器运用于迁移和同步数据的实例教程,分别是SQL Server数据迁移至MySQL以及同步备份数据表记录的两个例子,需要的朋友可以参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,116
精华内容 8,846
关键字:

mysql触发器实例

mysql 订阅