mysql笔记(22)--使用触发器

Posted HardyDragon_CC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql笔记(22)--使用触发器相关的知识,希望对你有一定的参考价值。

什么是触发器?

在事件发生时自动执行

MySQL语句在需要时被执行,存储过程也是如此。但是,如果你想要某条语句(或某些语句)在事件发生时自动执行,可能就需要用到触发器了。

所有这些例子的共同之处是它们都需要在某个表发生更改(增删改)时自动处理。这确切地说就是触发器

如何使用触发器?

创建触发器

在这里插入图片描述

USE mysql_must_study;

DELIMITER $$
$$
CREATE TRIGGER newproduct
AFTER INSERT
ON products FOR EACH ROW
SELECT 'Product added' INTO @res;
$$
DELIMITER ;

MYSQL5以后,不允许触发器返回任何结果,因此使用into @变量名,将结果赋值到变量中,用select调用即可。

在这里插入图片描述

修改表后查看res变量值,未修改前是NULL。

SELECT @res;

在这里插入图片描述

只有表才支持触发器,触发器按每个表每个事件每次地定义,每个表每个事件每次只允许一个触发器。

每个表最多支持6个触发器(每条INSERT、UPDATE和DELETE的之前和之后)。单一触发器不能与多个事件或多个表关联,所以,如果你需要一个对INSERT和UPDATE操作执行的触发器,则应该定义两个触发器

在这里插入图片描述

删除触发器

在这里插入图片描述

INSERT触发器

在这里插入图片描述

可以通过insert触发器查询自增的id值

USE mysql_must_study;

DELIMITER $$
$$
CREATE TRIGGER neworder
AFTER INSERT
ON orders FOR EACH ROW
SELECT NEW.order_num INTO @ID;
$$
DELIMITER ;
SELECT @ID;

一开始默认是NULL
在这里插入图片描述

插入后再查看

INSERT INTO orders(order_date,cust_id) VALUES (Now(),10001);

SELECT @ID;

在这里插入图片描述
在这里插入图片描述

DELETE触发器

在这里插入图片描述

USE mysql_must_study;

DELIMITER $$
$$
CREATE TRIGGER deleteorder
BEFORE DELETE 
ON orders FOR EACH ROW
BEGIN 
	INSERT INTO mysql_must_study.archive_orders (order_num,order_date,cust_id)
	VALUES (OLD.order_num,OLD.order_date,OLD.cust_id);
END 
$$
DELIMITER ;

在这里插入图片描述

原本的 archive_orders 表是空的。

现在删除一个订单,被删除的订单到 archive_orders 这来了。

DELETE FROM mysql_must_study.orders
WHERE order_num=20011;

在这里插入图片描述
在这里插入图片描述

UPDATE触发器

在这里插入图片描述

下面的例子保证州名 vend_state 缩写总是大写(不管UPDATE语句中给出的是大写还是小写)

USE mysql_must_study;

DELIMITER $$
$$
CREATE TRIGGER updatevendor
BEFORE UPDATE 
ON vendors FOR EACH ROW
SET NEW.vend_state = upper(NEW.vend_state); $$
DELIMITER ;

更新后

UPDATE mysql_must_study.vendors
SET vend_name='aaa', vend_address='aaa', vend_city='aaa', vend_state='aad', vend_zip='666', vend_country='UU'
WHERE vend_id=1007;

在这里插入图片描述

思维导图–总结

在这里插入图片描述

以上是关于mysql笔记(22)--使用触发器的主要内容,如果未能解决你的问题,请参考以下文章

MySql触发器使用

MySQL触发器

Oracle使用触发器和mysql中使用触发器的比较——学习笔记

MySQL-08-笔记

Mysql触发没有错误消息但代码不起作用

转:mysql触发器笔记