Mysql中的触发器的语法是什么

1.定义:

%ign%ignore_a_1%re_a_1% 中嵌入的一段程序包括触发器和存储过程,二者具有相似之处。触发器是由事件来触发某个操作。当数据库执行这些事件时,就会激活触发器来执行相应的操作。mysql中,触发条件包括update、insert和delete操作。

在MySQL中,目前只有UPDATE,INSERT,和DELETE这三种操作,才会触发触发器,其他操作都不支持触发器。这和Oracle中的触发器有很大的区别,要注意区分。

触发器的每个表每次事件,都只允许一个触发器。因此,每个表最多值允许有6个触发器。假如一个表需要对INSERT和DELETE两种事件进行触发,则需要分别创建两个触发器。

只有表才支持触发器,视图和临时表不支持。

2.语法:

CREATE TRIGGER TRIGGER_NAMEBEFORE/AFTER UPDATE/INSERT/DELETE ON TABLE_NAME FOR EACH ROW#触发器主体[BEGIN]SQL操作[END];

创建触发器:和创建存储过程是一样,用的都是CREATE 语句,但要注意,这里没有 OR REPLACE。

TRIGGER_NAME:触发器名称。在MySQL中,要保证每个表中的触发器是唯一的,每一个数据库内的触发器可以不唯一,这就说明了一个数据库内的两个表可以有相同的触发器。这种行为在其他的数据库内是不被允许的。为了保持格式的一致性,应尽量确保TRIGGER_NAME的独一无二性。

BEFORE/AFTER:触发器被触发的时刻。如果你想让触发器在事件触发之前执行,可以使用“BEFORE”,如果想在事件触发之后执行,可以使用“AFTER”。

操作:UPDATE/INSERT/DELETE,会触发相应的事件和条件。MySQL只允许这三种DDL操作支持触发器,其他操作均不被支持。

FOR EACH ROW:受触发事件影响的每一行都要激活触发器的动作。在MySQL中,行触发是指FOE EACH ROW不能省略,不支持语句触发。

触发器主体:既可以是单独的一条SQL语句,也可以是由BEGIN…END组成的复杂结构块。

# 创建一个触发器T1,在对表customer做插入操作时,就会触发T1,之后会在日志表note中插入一条数据CREATE TRIGGER T1AFTER INSERT ON customerFOR EACH ROW # 触发器主体INSERT INTO note(日期,目标,操作) VALUES(NOW(),'customer','insert');

3.删除触发器

  和删除表和存储过程类似,都是使用DROP语句来删除触发器。

#删除触发器T1DROP TRIGGER IF EXISTS T1;

触发器不能够更新和修改,想要修改一个触发器的内容,只能先将触发器删除,在创建一个新的触发器。

4.查询触发器

#在已知数据库内,查询触发器SHOW TRIGGERS;SELECT * FROM information_schema.TRIGGERS WHERE TRIGGER_NAME = '触发器名'#查询所有的触发器SELECT * FROM information_schema.TRIGGERS(WHERE TRIGGER_SCHEMA = '数据库名')

5.触发器类型OLD和NEW的使用

  触发器在DDL操作之前或者之后触发,总会对目标表做出一定的改动,有时我们需要知道目标表改变前后的值,这就用到了OLD和NEW的用法。

顾名思义,OLD就是改变之前的值,是UPDATE之前或者是要被DELETE或者已经被DELETE的值。

  而NEW,则是UPDATE之后的新值,即将INSERT或者已经INSERT的值。

Mysql中的触发器的语法是什么

  具体实例:

#创建customer表CREATE TABLE `customer` (`CUST_ID` int(11) NOT NULL AUTO_INCREMENT,`CUST_NAME` varchar(10) NOT NULL,`CUST_TEL` varchar(10) DEFAULT NULL,PRIMARY KEY (`CUST_ID`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;#向表中插入数据#创建一个update触发器CREATE TRIGGER T2AFTER UPDATE ON customerFOR EACH ROW #old和new的使用方法:old.columnname/new.columnname(列名)#将更新前后的值,赋值给两个变量SELECT OLD.CUST_ID,NEW.CUST_ID INTO @OLD_ID,@NEW_ID;#触发触发器T2UPDATE customer SET CUST_ID = '10000' WHERE CUST_NAME = 'AAA';#查询OLD和NEWSELECT @OLD_ID,@NEW_ID;

以上就是Mysql中的触发器的语法是什么的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/154933.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月4日 06:53:18
下一篇 2025年12月4日 07:56:37

相关推荐

发表回复

登录后才能评论
关注微信