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) 触发器的定义: 什么是触发器: 触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据是触发执行,他比数据库本身标准的功能有更精细和更复杂的数据 ...
随机推荐
- JSP基本语法总结【2】九大内置对象
内置对象也称为内建对象,隐含对象,即无需声明,直接可以在JSP中使用的java对象.JSP的内置对象就是把最常用.重要的几个对象直接创建了. JSP有9大内置对象:Request,Response, ...
- usaco 2002 月赛 Chores 题解
Description Farmer John's family pitches in with the chores during milking, doing all the chores as ...
- vijos1101题解
题目: 研究表明,这种传染病的传播具有两种很特殊的性质: 第一是它的传播途径是树型的,一个人X只可能被某个特定的人Y感染,只要Y不 得病,或者是XY之间的传播途径被切断,则X就不会得病. 第二是,这种 ...
- 设计模式 - 观察者模式(JDK)
定义:观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新. 对象: 抽象主题角色:每个抽象主题角色都可以有任意数量的观察者.抽象主题提供可 ...
- Iterator、for..of,for...in和自定义遍历器**
Iterator.for..of,for...in和自定义遍历器 Iterator: var arr = [1,2,3,4,5]; var ite = arr[Symbol.iterator](); ...
- nyoj_762:第k个互质数
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=762 直接给代码好了,容斥原理具体看<组合数学> #include<bi ...
- jenkins-APP打包页面展示二维码
背景: 客户要求在APP打包页面展示二维码.虽然感觉这个功能很鸡肋,但是还是加上吧. 效果展示: 配置: 在上图中,106对应的内容是BuildName,我们可以通过build-name-setter ...
- 回味Python2.7——笔记3
一.错误和异常 1.异常处理 >>> while True: ... try: ... x = int(raw_input("Please enter a number: ...
- maven-配置文件配置src/resource下的文件
classpath*:只找到applicationContext.xml classpath:/找到了所有
- 修改User-Agent来伪装浏览器访问手机站点
有时候为了测试需要,可能需要使用测试手机wap这样的站点,如果用真正的手机去测试也可以实现,但是比较麻烦,我们可以通过设置chrome的user agent来伪装浏览器,达到我们的测试目的. 代码如下 ...