1、创建触发器:
语法:
CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name
FOR EACH ROW
BEGIN
trigger_stmt
END;
大写的为关键字
trigger_name:触发器的名字,我常用的命名规则t_name_tableName_(b|a)(i|u|d),t:触发器标识,name:英文名,tableName:表名,b(BEFORE):标识是触发事件之前,a(AFTER):标识触发事件之后,i(insert):标识insert事件,u(update):标识update事件,d(delete):标识delete事件;
trigger_time:触发时间(BEFORE或AFTER)
trigger_event:事件名(insert或update或delete)
tbl_name:表名(必须是永久性表)
trigger_stmt:执行语句(可以是复合语名),使用别名OLD和NEW,能够引用与触发程序相关的表中的列。
2、删除解发器
语法:
DROP TRIGGER [schema_name.]trigger_name;
注意:以上操作均需SUPER权限
示例:
DROP TRIGGER t_wiley_hotelComment_bu;
delimiter //
CREATE TRIGGER t_wiley_hotelComment_bu BEFORE UPDATE ON hotel_comment
FOR EACH ROW
BEGIN
IF OLD.ispass=0 && NEW.ispass=1 THEN
UPDATE hotel_info SET sumcomment=sumcomment+1,sumconsume=sumconsume+NEW.consume,sumservice=sumservice+NEW.service, sumroom=sumroom+NEW.room,sumentiron=sumentiron+NEW.entironment,total=total+(NEW.service+NEW.room+NEW.entironment) WHERE hotel_id=NEW.hotel_id;
ELSEIF OLD.ispass=1 && NEW.ispass=0 THEN
UPDATE hotel_info SET sumcomment=sumcomment-1,sumconsume=sumconsume-NEW.consume,sumservice=sumservice-NEW.service, sumroom=sumroom-NEW.room,sumentiron=sumentiron-NEW.entironment,total=total-(NEW.service+NEW.room+NEW.entironment) WHERE hotel_id=NEW.hotel_id;
END IF;
END;//
delimiter ;
触发器使用
delimiter可以改变语句结束符
delimiter //
CREATE TRIGGER `trigger_target_update_last_track` AFTER UPDATE ON `target` FOR EACH ROW begin
set @oldmac = (select concat(old.device, ':', old.address));
set @newmac = (select concat(new.device, ':', new.address));
update last_track set mac=@newmac where mac = @oldmac;
end; //
分享到:
相关推荐
### MySQL触发器详解 #### 引言 MySQL作为一款广泛使用的开源关系型数据库管理系统,在其5.0版本中引入了许多重要的新特性,其中最引人注目的是存储过程、触发器、视图等高级功能的加入。本文将重点讨论MySQL 5.0...
【Oracle和MySQL触发器差异详解】 Oracle和MySQL都是广泛使用的数据库管理系统,但它们在特定功能上有显著的区别,尤其是在触发器的实现和使用上。触发器是一种数据库对象,它在特定的数据库事件(如INSERT、UPDATE...
初学mysql时,可能不太明白delimiter的真正用途,delimiter在mysql很多地方出现,比如存储过程、触发器、函数等。 学过oracle的人,再来学mysql就会感到很奇怪,百思不得其解。 其实就是告诉mysql解释器,该段命令...
以MySQL为例,创建一个简单的`CreatedAt`触发器的结构可能如下: ```sql CREATE TRIGGER before_insert_table_name BEFORE INSERT ON table_name FOR EACH ROW BEGIN SET NEW.CreatedAt = NOW(); END; ``` 在这个...
### MySQL触发器知识点详解 #### 引言 MySQL触发器是一种服务器端的程序,它可以响应特定的数据库事件(如插入、更新或删除记录)而自动执行。触发器自MySQL 5.0版本起被引入,这标志着MySQL在功能性上的一大进步,...
### MySQL触发器、存储过程、自定义函数、视图示例 #### 一、MySQL触发器 触发器是一种特殊类型的存储过程,它被设计为在特定事件(如INSERT、UPDATE或DELETE操作)发生时自动执行。触发器可以用来强制业务规则、...
### MySQL触发器详解 #### 一、触发器基础语法与结构 MySQL中的触发器是一种存储在数据库中的特殊类型的存储过程,它会在特定的数据库事件(如数据插入、更新或删除)发生时自动执行。触发器可以确保数据的一致性...
【例】 创建一个触发器,当修改Sell表中订购册数时,如果修改后的订购册数小于5本,则触发器将该对应的折扣修改为1,否则,折扣修改为0.8。 DELIMITER $$ CREATE TRIGGER sell_update BEFORE UPDATE ON Sell FOR EACH...
MySQL中的存储过程和触发器是数据库管理中两个重要的高级特性,它们极大地增强了数据库的灵活性和安全性,同时也优化了性能。 **存储过程**是预编译的SQL语句集合,存储在数据库服务器上,可以在需要时被调用执行,...
### MySQL触发器深入解析 #### 引言 触发器作为一种重要的数据库对象,为MySQL数据库带来了自动化执行特定任务的能力。这不仅增强了数据库的功能性,还提高了其智能化水平。尤其是在需要维护数据完整性、审计跟踪...
### MySQL触发器及相关代码示例 #### 一、触发器概念 触发器(Trigger)是一种特殊类型的存储过程,它能够监视数据库中的特定事件,并在这些事件发生时自动执行预定义的操作。触发器不是通过直接调用执行的,而是由...
总的来说,MySQL触发器是数据库层面实施业务规则和约束的有效工具,但应谨慎使用,以保持数据库性能和代码的可维护性。在适当的情况下,触发器可以提高数据一致性,减少应用程序中的重复逻辑,并帮助实现复杂的业务...
MySQL触发器是数据库管理系统中的一种重要机制,它允许在特定的数据库操作(如INSERT、UPDATE、DELETE)发生之前或之后自动执行预定义的SQL语句。在MySQL 5.7.2版本之前,每个表只能为特定事件(如BEFORE UPDATE或...
创建触发器可以使用以下语法: ```sql CREATE TRIGGER <触发器名> BEFORE/AFTER <触发器事件> ON <表名> FOR EACH ROW <触发器体> ``` 例如,创建一个名为 `before_insert_students` 的触发器,用于在插入学生信息...
本篇文章将详细介绍如何在MySQL中创建触发器,并通过一个实例来解析其工作原理和作用。 首先,创建触发器需要遵循一定的语法结构。以下是一个创建触发器的基本示例: ```sql DELIMITER $ -- 更改语句结束符 CREATE...
MySQL触发器是数据库管理系统提供的一种机制,用于在特定的数据操作(如INSERT、UPDATE或DELETE)发生时自动执行预定义的SQL语句。触发器的主要作用是实现数据的完整性约束、审计跟踪、业务规则的自动化执行等。在本...
- **复合语句**: 当触发器主体包含多条SQL语句时,需要使用BEGIN...END块将它们包围,并且在BEGIN后改变MySQL的默认语句分隔符(通常是分号),以避免仅执行第一条语句的问题。 #### 五、删除触发器 ```sql DROP ...
3. **使用 SQL 语句创建触发器**:最后,使用相应的SQL语句来创建触发器。 以下是一个创建触发器的例子: ```sql CREATE TRIGGER UpdateTimestamp BEFORE UPDATE ON Employees FOR EACH ROW BEGIN SET NEW.Last...