mysql 触发器(trigger)
触发器(trigger):监视某种情况,并触发某种操作。
触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/before) 4.触发事件
语法:
CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
触发程序与命名为tbl_name的表相关。tbl_name必须引用永久性表。不能将触发程序与临时表表或视图关联起来。
trigger_time是触发程序的动作时间。它可以是before或after,以指明触发程序是在激活它的语句之前或之后触发。
trigger_event指明了激活触发程序的语句的类型。trigger_event可以是下述值之一:
insert :将新行插入表时激活触发程序,例如,通过insert、load data和replace语句。
update:更改某一行时激活触发程序,例如,通过update语句。
delete :从表中删除某一行时激活触发程序,例如,通过delete和replace语句。
要注意,trigger_event与以表操作方式激活触发程序的SQL语句并不很类似,这点很重要。
例如:关于insert的before触发程序不仅能被insert语句激活,也能被load data语句激活。
create trigger triggerName
after/before insert/update/delete on 表名
for each row #这句话在mysql是固定的
begin
sql语句;
end;
对于insert语句, 只有new是合法的;
对于delete语句,只有old才合法;
对于update语句,new、old可以同时使用。
创建表(触发器要操作的两张表)
/*auto_increment:自增;priamry key :主键;comment:注释*/
/* drop:删除;if exists xxx(判断xxx名在数据库时候是否出存在xxx名称)*/
/* for each row :循环一行一行的执行数据 */
/* after insert/update/delete on table_name :针对哪个表执行的insert/update/delete 操作 */
drop table if exists table1; create table table1( id ) primary key auto_increment not null comment 'id', name ) comment '名字' ); drop table if exists table2; create table table2( id int primary key auto_increment not null comment 'id', name ) comment '名字' );
Before与After区别:
before:(insert、update)可以对new进行修改,after不能对new进行修改,两者都不能修改old数据。
insert 触发器
drop trigger if exists insert_on_table1; create trigger insert_on_table1 after insert on table1 for each row begin insert into table2(name) value(new.name); end
操作触发器
insert table1(name) value('aaa');
查询table2是否有值
select * from table2;
delete触发器
drop trigger if exists delete_on_table1; create trigger delete_on_table1 after delete on table1 for each ROW begin delete from table2 where name=old.name; end
执行删除操作
;
查询table2变化
select * from table2;
更新table1更新触发器
drop trigger if exists update_on_table1; create trigger update_on_table1 after update on table1 for each ROW begin update table2 set name=new.name where name=old.name; end
执行更新操作
update table1 set name='ccc';
查询table2变化
select * from table2;
使用before 统计插入积分例子:
创建表
drop table if exists table3; create table table3( id int primary key auto_increment comment 'id', num int comment '积分' )engine=myisam default charset=utf8 comment='单独积分表';
创建用函数变量接收的触发器
drop trigger if exists insert_on_table3; create trigger insert_on_table3 before insert on table3 for each row set @sum=@sum+new.num;
执行触发器
; ,),(,),(,),(,); select @sum;
mysql 触发器(trigger)的更多相关文章
- mysql触发器trigger 实例详解
mysql触发器trigger 实例详解 (转自 https://www.cnblogs.com/phpper/p/7587031.html) MySQL好像从5.0.2版本就开始支持触发器的功能 ...
- 如何使用MySQL触发器trigger
阅读目录:触发器trigger的使用 创建触发器 单一执行语句.多执行语句 new.old详解 查看触发器 删除触发器:慎用触发器,不用就删除 Q:什么是触发器? A: 触发器是与表有关的数据库对象, ...
- mysql 触发器 trigger用法 two (稍微复杂的)
触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/befo ...
- MySQL触发器Trigger实例篇
定义: 何为MySQL触发器? 在MySQL Server里面也就是对某一个表的一定的操作,触发某种条件(Insert,Update,Delete 等),从而自动执行的一段程序.从这种意义上讲触发器是 ...
- MySQL触发器 trigger学习
触发器:一类特殊的事物.可监视某种数据操作,并触发相关操作(insert/update/delete).表中的某些数据改变,希望同一时候能够引起其他相关数据改变的需求. 作用:变化自己主动完毕某些语句 ...
- MySQL 触发器trigger
一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(af ...
- MySQL触发器 trigger之for each row
for each row 每行受影响,触发器都运行.叫行级触发器. oracle 触发器中分行级触发器和语句级触发器,可不写for each row,不管影响多少行都仅仅运行一次. mysql不支持语 ...
- (转)MySQL触发器trigger示例详解
一.什么是触发器 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合.触发器的这种特性可以协助应用在数据库端确保数据的完整性. 举个例子,比如你现在有两个表[用户表]和[ ...
- mysql 触发器 trigger用法 three (稍微复杂的)
MySQL包含对触发器的支持.触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行. 创建触发器 在MySQL中,创建触发器语法如下 ...
随机推荐
- MySQL 5.7 在windows下修改max_allowed_packet变量
(一)执行sql遇到的错误如下: ### Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (387 ...
- [leetcode-567-Permutation in String]
Given two strings s1 and s2, write a function to return true if s2 contains the permutation of s1. I ...
- JUnit【1】断言用法之assertEquals/True/False/ArrayEquals
前段时间去亚信面试,被问到写一个冒泡排序,心想这多新鲜,刷刷几下写好.面试官突然问,你怎么对这个程序进行单元测试? 单元测试?! 懵圈... 单元测试 代码是为了什么, ...
- Java多线程(一) —— 线程的状态详解
一.多线程概述 1. 进程 是一个正在执行的程序.是程序在计算机上的一次运行活动. 每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者叫一个控制单元. 系统以进程为基本单位进行系统资源的调度 ...
- Hibernate快速入门实例
Hibernate工程项目创建基本步骤:导包(Hibernate依赖包.SQL驱动包).编写实体类.编写ORM映射配置文件.编写核心配置文件.编写测试驱动. 整个工程项目结构如下图: 一.导包 笔者使 ...
- Egret index.html设置
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...
- 谈谈ES6箭头操作符
如果你会C#或者Java,你肯定知道lambda表达式,ES6中新增的箭头操作符=>便有异曲同工之妙.它简化了函数的书写.操作符左边为输入的参数,而右边则是进行的操作以及返回的值Inputs=& ...
- C# 中的 ConfigurationManager类引用方法应用程序配置文件App.config的写法
c#添加了Configuration;后,竟然找不到 ConfigurationManager 这个类,后来才发现:虽然引用了using System.Configuration;这个包,但是还是不行 ...
- ASP.NET Core MVC 过滤器介绍
过滤器的作用是在 Action 方法执行前或执行后做一些加工处理.使用过滤器可以避免Action方法的重复代码,例如,您可以使用异常过滤器合并异常处理的代码. 过滤器如何工作? 过滤器在 MVC Ac ...
- 关于华为P9手机的解锁、刷Recovery、获取Root、安装Busybox,以及升级降级的全过程(和一些错误的解决方法)
我有一部华为P9手机,型号EVA-TL00,属于移动定制机.用了半年多了,想给手机添加一些功能,发现有些功能必须Root之后才能用代码实现,所以动了Root的打算. 一.手机解锁.(不解锁则无法对手机 ...