MySQL触发器学习
简介
MySQL从5.0.2版本开始支持触发器的功能。触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。
创建触发器
语法:
CREATE TRIGGER trigger_name trigger_time trigger_event
ON tb_name FOR EACH ROW trigger_stmt
根据语法来演示如何创建一个触发器,首先创建2张表:student 和 student_demo
-- CREATE TABLE student
CREATE TABLE `student` (
`id` ) unsigned NOT NULL AUTO_INCREMENT,
`name` ) NOT NULL,
`age` ) NOT NULL,
`gender` enum('女','男') NOT NULL,
`address` ) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE DEFAULT CHARSET=utf8;
-- CREATE TABLE student_demo
CREATE TABLE `student_demo` (
`id` ) NOT NULL,
`name` ) NOT NULL,
`address` ) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
现在假设在表student新增一条记录后,student_demo也需新增一条记录,根据此需求来演示触发器的创建
-- CREATE TRIGGER ins_student
CREATE TRIGGER ins_student AFTER INSERT ON student FOR EACH ROW
BEGIN
INSERT INTO student_demo (id, name, address)
VALUES
(
new.id,
new.name,
new.address
);
END;
现在为student表创建了AFTER INSERT的触发器,在向student表插入数据时,student_demo也会插入相应的记录

可以看到,在向student表中新增一个名为"韩梅梅"的学生信息时,student_demo也新增了其对应信息
对于INSERT INTO...ON DUPLICATE KEY UPDATE语句,触发触发器的顺序有所不同。对student表分别创建BEFORE INSERT、AFTER INSERT、BEFORE UPDATE、AFTER UPDATE,插入记录观察结果。
-- 创建表tri_test
), PRIMARY KEY (id))
-- 创建before insert触发器
CREATE TRIGGER ins_student_bef BEFORE INSERT ON student FOR EACH ROW
BEGIN
INSERT INTO tri_test (note)
VALUES
('before insert');
END;
-- 创建after insert触发器
CREATE TRIGGER ins_student_aft AFTER INSERT ON student FOR EACH ROW
BEGIN
INSERT INTO tri_test (note)
VALUES
('after insert');
END;
-- 创建before update触发器
CREATE TRIGGER upd_student_bef BEFORE UPDATE ON student FOR EACH ROW
BEGIN
INSERT INTO tri_test (note)
VALUES
('before update');
END;
-- 创建after update触发器
CREATE TRIGGER upd_student_aft AFTER UPDATE ON student FOR EACH ROW
BEGIN
INSERT INTO tri_test (note)
VALUES
('after update');
END;
现在student表中已有一条记录

现在对id=3的记录,插入数据
INSERT INTO student
VALUES
(
,
'李雷',
,
'男',
'河北石家庄'
) ON DUPLICATE KEY UPDATE NAME = 'update record'
表student和tri_test中的数据为:

对于有重复记录、需要进行UPDATE的INSERT操作,触发器出发的顺序是BEFORE INSERT、BEFORE UPDATE、AFTER UPDATE
如果是插入新的不重复的数据
INSERT INTO student
VALUES
(
,
'大卫',
,
'男',
'河北保定'
) ON DUPLICATE KEY UPDATE NAME = 'update record'
则表数据为

触发器的顺序为BEFORE INSERT、AFTER INSERT
删除触发器
一次可删除一个触发器,如果没有指定则默认为当前数据库。语法如下:
DROP TRIGGER [schema_name.]trigger_name
例如,要删除触发器ins_student,可以执行

查看触发器
SHOW TRIGGERS
可以通过SHOW TRIGGERS命令来查看触发器的状态、语法等信息,此命令查询的是所有触发器的信息
查询系统表
通过查询系统表中的information_schema.triggers表,可以查询指定触发器的信息

查询指定触发器"ins_student"的信息

MySQL触发器学习的更多相关文章
- 一篇很棒的 MySQL 触发器学习教程
一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动 ...
- MySQL触发器学习总结
1.What 触发器是MySQL响应DELETE,INSERT,UPDATE语句前后而自动执行的一条MySQL语句 2.Why(使用情形) 增加一个订单对应库存-1 删除一行在 ...
- MYSQL触发器学习笔记
课程学至金色晨曦科技公司技术总监沙利穆 触发器 1. 什么是触发器 触发器是一种特殊类型的存储过程,不由用户直接调用.创建触发器时会对其进行定义,以便在对特定表或列作特定类型的数据修改时执 ...
- MySQL 触发器学习-markdown->html 格式测试
<!doctype html>触发器 figure:first-child { margin-top: -20px; } #write ol, #write ul { position: ...
- mysql 触发器学习(可以将mysql数据同步到redis)
1. 一个简单的例子 1.1. 创建表: create table t(s1 integer); 1.2. 触发器: delimiter | create trigger t_trigger befo ...
- mysql 触发器学习
1. 一个简单的例子 1.1. 创建表: create table t(s1 integer); 1.2. 触发器: delimiter | create trigger t_trigger befo ...
- mysql触发器 学习
1. 说明: 触发器的定义就是说某个条件成立的时候,你触发器里面所定义的语句就会被自动的执行.因此触发器不需要人为的去调用,也不能调用.然后,触发器的触发条件其实在你定义的时候就已经设定好 ...
- 关于mysql触发器和存储过程的理解
内容源自:一篇很棒的 MySQL 触发器学习教程 一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊 ...
- MYSQL进阶学习笔记七:MySQL触发器的创建,应用及管理!(视频序号:进阶_16,17)
知识点八:MySQL触发器的应用(16,17) 触发器的定义: 什么是触发器: 触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据是触发执行,他比数据库本身标准的功能有更精细和更复杂的数据 ...
随机推荐
- springmvc的POST 请求转为 DELETE 或 put 请求配置HiddenHttpMethodFilter
1.web.xml里配置 <!-- 配置 org.springframework.web.filter.HiddenHttpMethodFilter: 可以把 POST 请求转为 DELETE ...
- EF查询百万级数据的性能测试--多表连接复杂查询
相关文章:EF查询百万级数据的性能测试--单表查询 一.起因 上次做的是EF百万级数据的单表查询,总结了一下,在200w以下的数据量的情况(Sql Server 2012),EF是可以使用,但是由于 ...
- wifi扩展设置
一.主路由器设置 网络参数 LAN口设置查到 MAC地址,用于设置扩展路由器 Bridge功能设置时 AP1的地址 2.无线基本设置,桥的 SSID BSSID 为扩展 3.无线安全设置 二.扩展路由 ...
- Socket异步通信及心跳包同时响应逻辑分析。
有段时间没有更博了,刚好最近在做Socket通信的项目,原理大致内容:[二维码-(加logo)]-->提供主机地址和端口号信息(直接使用[ThoughtWorks.QRCode.dll]比较简单 ...
- Java Jpa 规范
Jpa最早是EJB3.0里面的内容,JSR 220: Enterprise JavaBeansTM 3.0 https://www.jcp.org/en/jsr/detail?id=220 后来大约在 ...
- Centos 6.5开启rsync同步
一.测试环境 操作系统:Centos6.5 Server1:172.18.11.100 源服务器 Server2:172.18.11.110 目标服务器 二.操作步骤: 1.先 ...
- 添加zabbix自动发现(监控多tomcat实例)
说明 何为自动发现?首先我们监控多tomcat实例,如果一个个实例地添加或许可以完成当前需求.但是日后随着实例的增多,再手动一个个去添加就十分不方便了.这时候需要自动发现这个功能,来帮助我们自动添加监 ...
- Selenium模拟JQuery滑动解锁
滑动解锁一直做UI自动化的难点之一,我补一篇滑动解锁的例子,希望能给初做Web UI自动化测试的同学一些思路. 首先先看个例子. https://www.helloweba.com/demo/2017 ...
- Linux项目自动部署
场景:linux中自动部署项目在工作中经常遇到,快速高效的部署项目能够大幅提高工作效率.现在将项目部署的过程记录下来,以供参考,其中用到的知识点现在还有很多不很清楚,后面要好好琢磨琢磨! 1 项目部署 ...
- hiernate-session
一.概述 Session 是 Hibernate 向应用程序提供操纵数据的主要接口,它提供了基本的保存.更新.删除和加载 Java 对象的方法. 二.Session 缓存 1.简介 (1)Sessio ...