MySQL触发器使用详解 |
本文标签:MySQL,触发器 MySQL包含对触发器的支持 。触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行 。 创建触发器 复制代码 代码如下: CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt 其中: trigger_name:标识触发器名称,用户自行指定; 由此可见,可以建立6种触发器,即:BEFORE INSERT、BEFORE UPDATE、BEFORE DELETE、AFTER INSERT、AFTER UPDATE、AFTER DELETE 。 另外有一个限制是不能同时在一个表上建立2个相同类型的触发器,因此在一个表上最多建立6个触发器 。 trigger_event 详解 LOAD DATA 语句用于将一个文件装入到一个数据表中,相当与一系列的 INSERT 操作 。 REPLACE 语句一般来说和 INSERT 语句很像,只是在表中有 primary key 或 unique 索引时,如果插入的数据和原来 primary key 或 unique 索引一致时,会先删除原来的数据,然后增加一条新数据,也就是说,一条 REPLACE 语句有时候等价于一条 。 INSERT 语句,有时候等价于一条 DELETE 语句加上一条 INSERT 语句 。 INSERT 型触发器:插入某一行时激活触发器,可能通过 INSERT、LOAD DATA、REPLACE 语句触发; BEGIN … END 详解 BEGIN 这时就会用到 DELIMITER 命令(DELIMITER 是定界符,分隔符的意思),它是一条命令,不需要语句结束标识,语法为: 一个完整的创建触发器示例 复制代码 代码如下: DELIMITER $ create trigger tri_stuInsert after insert on student for each row begin declare c int; set c = (select stuCount from class where classID=new.classID); update class set stuCount = c + 1 where classID = new.classID; end$ DELIMITER ; 变量详解 即其它语句之前,语法如下: DECLARE var_name[,...] type [DEFAULT value] 对变量赋值采用 SET 语句,语法为: SET var_name = expr [,var_name = expr] ... NEW 与 OLD 详解 上述示例中使用了NEW关键字,和 MS SQL Server 中的 INSERTED 和 DELETED 类似,MySQL 中定义了 NEW 和 OLD,用来表示 触发器的所在表中,触发了触发器的那一行数据 。 查看触发器 和查看数据库(show databases;)查看表格(show tables;)一样,查看触发器的语法如下: SHOW TRIGGERS [FROM schema_name]; 不必先“USE database_name;”了 。 删除触发器 和删除数据库、删除表格一样,删除触发器的语法如下: DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name 触发器的执行顺序 我们建立的数据库一般都是 InnoDB 数据库,其上建立的表是事务性表,也就是事务安全的 。这时,若SQL语句或触发器执行失败,MySQL 会回滚事务,有: ①如果 BEFORE 触发器执行失败,SQL 无法正确执行 。 小伙伴们是否对mysql的触发器的使用有所了解了呢,如有疑问,就给我留言吧,大家共同进步 。 |