MySQL 触发器
来源:互联网 发布:c 二维数组输入 编辑:程序博客网 时间:2024/06/05 11:46
概念
触发器(Trigger)是一个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件触发。
触发器经常用于加强数据的完整性约束和业务规则等。
语法
CREATE TRIGGER 触发器名称 BEFORE|AFTER 触发事件 ON 表名 FOR EACH ROW BEGIN 触发器程序体 END-- 触发器名称,它和MySQL中其他对象的命名方式-- {BEFORE|AFTER} 触发器触发的时机-- {INSERT|UPDATE|DELETE} 触发器事件-- FOR EACH ROW 表示当所有匹配行的事件发生时才会触发。
创建触发器的例子
mysql> desc student;+-------+------------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-------+------------------+------+-----+---------+----------------+| id | int(10) unsigned | NO | PRI | NULL | auto_increment || name | varchar(50) | YES | | NULL | |+-------+------------------+------+-----+---------+----------------+2 rows in set (0.02 sec)mysql> desc student_total;+-------+---------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+---------+------+-----+---------+-------+| total | int(11) | YES | | NULL | |+-------+---------+------+-----+---------+-------+1 row in set (0.01 sec)mysql> delimiter &&mysql> create trigger student_insert_trigger after insert -> on student for each row -> BEGIN -> update student_total set total=total+1; -> END&&mysql> delimiter ;
3. 查看触发器
通过show语句查看
show triggers\G
通过系统表查看
use information_shcema;select * from tirggers\Gselect * from triggers where TRIGGER_NAME = '触发器名称'\G
4. 删除触发器
drop trigger 触发器名称
5. 触发器示例
--安全地删除表drop table if exists tab1;
5.1 增加tab1表记录后自动将记录添加到tab2中
5.1.1表结构
mysql> desc tab1;+---------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+---------+-------------+------+-----+---------+-------+| tab1_id | varchar(50) | YES | | NULL | |+---------+-------------+------+-----+---------+-------+1 row in set (0.02 sec)mysql> desc tab2;+---------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+---------+-------------+------+-----+---------+-------+| tab2_id | varchar(50) | YES | | NULL | |+---------+-------------+------+-----+---------+-------+1 row in set (0.00 sec)
5.1.2 创建触发器
触发器中new
和old
的作用
- 针对update操作,
new
表示的是更新后的值,old
表示的是原来的数据。 - 针对insert操作,
new
表示的是插入的值。 - 针对delete操作,
old
表示的是删除后的值。
表名触发时机动作
-- 插入触发器mysql> delimiter $$mysql> create trigger tab1_after_insert after insert -> on tab1 for each row -> BEGIN -> insert into tab2(tab2_id) values(new.tab1_id); -> END -> $$Query OK, 0 rows affected (0.02 sec)mysql> delimiter ;
-- 删除触发器mysql> delimiter $$mysql> create trigger tab1_delete_after after delete -> on tab1 for each rows -> BEGIN -> delete from tab2 where tab2_id = old.tab1_id; -> END -> $$Query OK, 0 rows affected (0.01 sec)mysql> delimiter ;
5.2 记录学生表的更新
5.2.1 表结构
-- 学生表mysql> desc student1;+--------------+-----------------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+--------------+-----------------------+------+-----+---------+----------------+| student_id | int(11) | NO | PRI | NULL | auto_increment || student_name | varchar(30) | NO | | NULL | || student_sex | enum('male','female') | YES | | male | |+--------------+-----------------------+------+-----+---------+----------------+3 rows in set (0.00 sec)-- 更新记录表mysql> desc update_student1;+---------------+---------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+---------------+---------+------+-----+---------+----------------+| update_record | int(11) | NO | PRI | NULL | auto_increment || student_id | int(11) | NO | | NULL | || update_date | date | YES | | NULL | |+---------------+---------+------+-----+---------+----------------+3 rows in set (0.00 sec)
5.2.2 创建触发器
-- 更新学生表的同时也更新记录表delimiter $$mysql> create trigger student1_update_after after update -> on student1 for each row -> BEGIN -> if new.student_id != old.student_id then -> update update_student1 set student_id = new.student_id, update_date = now() -> where student_id = old.student_id; -> end if; -> END -> $$delimiter ;
-- 删除学生表的时候也删除记录表mysql> delimiter $$mysql> create trigger student1_delete_before before delete -> on student1 for each row -> BEGIN -> delete from update_student1 -> where student_id = old.student_id; -> END -> $$delimiter ;
阅读全文
0 0
- 【mysql 触发器】触发器使用
- MYSQL 触发器
- mysql 触发器
- Mysql 触发器
- mysql 触发器
- mysql触发器
- MYSQL 触发器
- MySQL触发器
- mysql 触发器
- mysql触发器
- MYSQL 触发器
- mysql 触发器
- mysql 触发器
- MySQL触发器
- MYSQL触发器
- mysql触发器
- mysql触发器
- mysql触发器
- 提高MySQL性能的7个技巧
- 前序遍历和中序遍历构造二叉树----C语言数据结构
- ssh struts2 action如何在前台弹出信息提示
- JAVA内存泄露(Effective java学习)
- 关于js作用域,闭包的小例子(经典js)
- MySQL 触发器
- golang基础-终端读(Scanln\bufio)、bufio文件读、、ioutil读读压缩、缓冲区读写、文件写入、文件拷贝
- MATLAB基础
- 11月已到,会分叉出第三种 “比特币” 吗?
- Java学习——赋值运算符
- 题解:第一次测试(2,3)
- String 简单分析
- transform函数转换大小写
- K-近邻算法