mysql系列:触发器使用

本文介绍如何使用MySQL创建触发器,并通过实例演示了触发器的工作原理。包括触发器的定义、触发时机、触发动作等关键概念,并展示了触发器对多个表的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、创建触发器,初始化数据:

CREATE TABLE test1(a1 INT);
CREATE TABLE test2(a2 INT);
CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
CREATE TABLE test4(
  a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
  b4 INT DEFAULT 0
);
 
DELIMITER |	# 定界符

# 定义testref触发器,在插入test1之前触发
# 触发动作:INSERTDELETEUPDATE
# 触发时间:BEFOREAFTER
CREATE TRIGGER testref BEFORE INSERT ON test1
  FOR EACH ROW BEGIN
		# 别名OLD和NEW,能够引用与触发程序相关的表中的列。
		# OLD.col_name在更新或删除它之前,引用已有行中的1列。
		# NEW.col_name在更新它之后引用将要插入的新行的1列或已有行的1列。
    INSERT INTO test2 SET a2 = NEW.a1;	
    DELETE FROM test3 WHERE a3 = NEW.a1;  
    UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
  END
|
 
DELIMITER ;
 
INSERT INTO test3 (a3) VALUES 
  (NULL), (NULL), (NULL), (NULL), (NULL), 
  (NULL), (NULL), (NULL), (NULL), (NULL);
 
INSERT INTO test4 (a4) VALUES 
  (0), (0), (0), (0), (0), (0), (0), (0), (0), (0);

2、对test1插入一条数据:

INSERT INTO test1 VALUES (1), (3), (1), (7), (1), (8), (4), (4);

对比结果如图所示:

test1数据表前后对比图:

        

test2数据表前后对比图:

        

test3数据表前后对比图:

        

test4数据表前后对比图:

        


3、删除触发器:DROP TRIGGER testref;

4、补充说明:

在触发程序的执行过程中,MySQL处理错误的方式如下:

  • 如果BEFORE触发程序失败,不执行相应行上的操作。
  • 仅当BEFORE触发程序(如果有的话)和行操作均已成功执行,才执行AFTER触发程序。
  • 如果在BEFORE或AFTER触发程序的执行过程中出现错误,将导致调用触发程序的整个语句的失败。
  • 对于事务性表,如果触发程序失败(以及由此导致的整个语句的失败),该语句所执行的所有更改将回滚。对于非事务性表,不能执行这类回滚,因而,即使语句失败,失败之前所作的任何更改依然有效。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值