MySQL - 触发器

本文介绍了MySQL触发器,作为数据库完整性控制的一种机制,用于在数据插入、删除或更新时自动执行相关操作。触发器是特殊的存储过程,限制了每个表的每个操作只能有一个before或after触发器。通过示例展示了如何创建触发器,如在向departments表添加新部门时,同时记录到日志表。还讨论了触发器中的new和old临时表,以及如何查看已定义的触发器。
摘要由CSDN通过智能技术生成

触发器

  • 触发器:是一种完整性控制机制。包括:实体完整性(主键)、参照完整性(外键)、空值约束、默认约束(default)。
  • 当数据库系统执行 insert | delete | update 操作,会自动激活触发器,触发器体内语句得以执行,实现对应的功能。
  • 触发器是特殊的存贮过程。
  • 同一个表的同一个操作 insert 基于同一个时间(after | before)的触发器只能定义一个。
  • 使用触发器来实现完整性控制会使数据库性能大大降低(使用存贮过程也会),所以尽可能通过后台开发工具来实现业务逻辑。
  • insert | delete | update 称为触发事件。

触发器的定义

create trigger 触发器名 after | before insert | delete | update on 表名 for each row
	begin
	触发器体;
end;

例1、向departments表中插入一个新部门时,同时向departments_log表中插入一条新纪录

	select * from departments;

-- 建立日志表:记录哪个表什么时间做了插入操作
	drop table if exists tlogger;
	create table tlogger(
		logId int(6) auto_increment PRIMARY KEY,
		tableName varchar(20),
		logTime datetime
	);

	select * from tlogger;
	
	drop trigger if exists tri_loggertime_depts;
	create trigger tri_loggertime_depts before insert on departments for each row
		begin
		insert into tlogger(tableName,logTime) values('departments',NOW());
		end;
	
	drop trigger if exists tri_loggertime_regions;
	create trigger tri_loggertime_regions before insert on regions for each row
		begin
		insert into tlogger(tableName,logTime) values('regions',NOW());
		end;
	
	select now();
	delete from tlogger;
	
	insert into departments VALUES(330,'Test',118,1800);
	
	insert into regions VALUES
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值