MySql(18)------mysql触发器的使用

来源:互联网 发布:松井玲奈毕业 知乎 编辑:程序博客网 时间:2024/06/05 17:08

1. 触发器概要

MySql从5.0.2开始支持触发器。触发是与表相关的数据库操作,在满足定义条件时触发,并执行触发器中定义的语句。

可以协助应用程序在数据库端确保数据的完整性,减少不必要的逻辑处理。触发器只能创建在永久表上,不能创建在临时表上。

对于同一个表,相同触发时间,相同触发事件,只能定义一个触发器。

创建语法:

CREATE TRIGGER trigger_name trigger_time trigger_event

ON table_name FOR EACH ROW trigger_statement


trigger_name: 触发器名字

trigger_time: 触发时间,包括before或after,before是指在检查约束前触发,after是检查约束后触发

trigger_event: 触发事件,包括insert,update或delete

table_name: 触发器针对的表名

trigger_statement: 触发器触发后执行的sql集合

FOR EACH ROW: 行级触发器,mysql不支持语句级触发器

注意: 使用old和new来引用触发器中发生变化的记录内容。

2. 实例准备条件

创建表1:

CREATE TABLE `t_user_main` (  `f_userId` int(10) NOT NULL AUTO_INCREMENT COMMENT '用户id,作为主键',  `f_userName` varchar(5) DEFAULT NULL COMMENT '用户名',  `f_age` int(3) DEFAULT NULL COMMENT '年龄',  PRIMARY KEY (`f_userId`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

插入数据:

INSERT INTO t_user_main (f_userName, f_age) VALUES('one',24),('two',25),('three',26),('four',27),('five',28),('six',29);
创建表2:

CREATE TABLE `t_user_person_info` (  `f_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',  `f_userId` int(11) NOT NULL COMMENT '用户id',  `f_salary` decimal(14,2) NOT NULL DEFAULT '0.00' COMMENT '工资',  PRIMARY KEY (`f_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3. 创建触发器实例

eg:

DELIMITER $$CREATE TRIGGER user_main_tr AFTER INSERTON t_user_mainFOR EACH ROWBEGIN  INSERT INTO t_user_person_info(f_userId) VALUES (new.f_userId);END $$DELIMITER;
测试触发器:


4. 查看触发器

触发器查看不如表,视图,函数,存储过程查看方便,mysql提供的触发器查看命令如下:

show triggers \G;该命令只能查看所有的触发器,如果需要查看具体的触发器,需要使用系统

库information_schema查询。

查看所有触发器,这里只有一个,所以看到一个,如果有多个,可以看到多个:


指定触发器查看:


5. 删除触发器

DROP TRIGGER [schema_name.] trigger_name;


0 0