mysql触发器
触发器:trigger,事先为某张表绑定好一段代码,当表中某些内容发生改变的时候(增删改),系统会自动触发代码,执行

触发器:事件类型,触发时间,触发对象
事件类型:增删改,三种类型,insert,delete,update
触发时间:前,后,before,after
触发对象:针对表中的每一条记录(行)
一张表中只能拥有一种触发时间、一种类型的触发器,最多一张表能有6个触发器,2(触发时间)*3(触发类型)=6

创建触发器:
在sql高级结构中,没有大括号,多事用对应的字符代替的
触发器基本语法:
-- 临时修改语句结束符
delimiter 自定义符号:后续代码中,只有碰到自定义符号才算结束
create trigger 触发器名字 触发时间 时间类型 on 表名 for each row
begin -- 代表左大括号,开始
-- 触发器内容,每行内容都必须使用语句结束符 ; 结束
end --代表右大括号,结束
-- 语句结束符
自定义符号
-- 将临时修改修正过来
delimiter ;

create table my_goods(
id int primary key auto_increment,
name varchar(20) not null,
price decimal(10,2) default 1,
inv int comment '库存'
)charset utf8;

insert into my_goods values (null,'iphone6s',5288,100),(null,'s6',6088,60);

create table my_order (
id int primary key auto_increment,
g_id int not null comment '商品id',
g_number int comment '商品数量'
)charset utf8;

-- 触发器,订单生成一个,商品减少
-- 临时修改语句结束符
delimiter $$
create trigger after_order after insert on my_order for each row
begin
-- 触发器内容开始
update my_goods set inv = inv - 1 where id = 2;

end
-- 结束触发器
$$
-- 修正临时语句结束符
delimiter ;

查看所有触发器或者模糊匹配
show triggers [like 'partten'] ;
查看触发器创建语句
show create trigger 触发器名字;

所有的触发器都会保存到一张表中,information_schema.triggers;\
select * from information_schema.triggers;

使用触发器
触发器:不需要手动调用,当某种情况发生时会自动触发,(订单里面插入记录之后)

-- 插入订单
insert into my_order values(null,1,2)

触发器不能修改,只能先删除后新增
drop trigger 触发器名字;
drop trigger after_order;

触发器记录:是指不管触发器是否触发了,只要当某种操作准备执行,系统就会将当前要操作的记录的当前状态和即将执行之后的新的状态给分别保留下来,供触发器使用:要操作当前状态保存在old中,操作之后的可能形态保存给new

old代表的是旧记录,new代表新记录
删除的时候是没有new的,插入的时候是没有old的
old和new都是代表记录本身,任何一条记录都除了有数据,还有字段名字。
使用方式:old字段名/new字段名(new代表假设发生之后的结果)

-- 触发器,订单生成一个,商品减少
-- 临时修改语句结束符
delimiter $$
create trigger after_order after insert on my_order for each row
begin
-- 触发器内容开始:新增一条订单,old没有,new代表新的订单记录
update my_goods set inv = inv - new.g_number where id = new.g_id;

end
-- 结束触发器
$$
-- 修正临时语句结束符
delimiter ;

-- 插入订单
insert into my_order values(null,1,2)

mysql_触发器的更多相关文章

  1. MySQL_视图/触发器/事务/存储过程/函数

    视图.触发器.事务.存储过程.函数 视图 视图是一个虚拟表(非真实存在),其本质是根据SQL语句获取动态的数据集,并为其命名,用户使用时只需使用名称即可获取结果集,可以将该结果集当作表来使用 #创建视 ...

  2. Mysql_事务_存储过程_触发器

    一.什么是事务? 事务(Transaction),一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit).事务通常由高级数据库操纵语言或编程语言( ...

  3. pt-online-schema-change中update触发器的bug

    pt-online-schema-change在对表进行表结构变更时,会创建三个触发器. 如下文测试案例中的t2表,表结构如下: mysql> show create table t2\G . ...

  4. MySQL主从环境下存储过程,函数,触发器,事件的复制情况

    下面,主要是验证在MySQL主从复制环境下,存储过程,函数,触发器,事件的复制情况,这些确实会让人混淆. 首先,创建一张测试表 mysql),age int); Query OK, rows affe ...

  5. MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...

  6. MSSQL 事务,视图,索引,存储过程,触发器

    事务 事务是一种机制.是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行. 在数据库系统上执行并发操作时事务是作为最小的控制单元来使用的.这特别适用于多用户同时操作的数据 ...

  7. Mysql - 触发器/视图

    触发器在之前的项目中, 应用的着实不多, 没有办法的时候, 才会去用这个. 因为这个东西在后期并不怎么好维护, 也容易造成紊乱. 我最近的项目中, 由于数据库设计(别人设计的)原因, 导致一些最简单功 ...

  8. Oracle使用触发器和mysql中使用触发器的比较——学习笔记

    一.触发器 1.触发器在数据库里以独立的对象存储, 2.触发器不需要调用,它由一个事件来触发运行 3.触发器不能接收参数 --触发器的应用 举个例子:校内网.开心网.facebook,当你发一个日志, ...

  9. 我的MYSQL学习心得(十二) 触发器

    我的MYSQL学习心得(十二) 触发器 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数 ...

随机推荐

  1. 搭建FTP服务器 window7

    1.安装IIS组件,打开控制面板-->程序和功能,点击打开或关闭windows功能 找到Internet信息服务,勾选FTP服务器和Web管理工具下的IIS管理控制台进行安装ftp,如图所示 2 ...

  2. (转)Android学习路线总结,绝对干货

    一.前言 不知不觉自己已经做了几年开发了,由记得刚出来工作的时候感觉自己能牛逼,现在回想起来感觉好无知.懂的越多的时候你才会发现懂的越少. 如果你的知识是一个圆,当你的圆越大时,圆外面的世界也就越大. ...

  3. ES6 WeakMap和WeakSet的使用场景

    JavaScript垃圾回收是一种内存管理技术.在这种技术中,不再被引用的对象会被自动删除,而与其相关的资源也会被一同回收. Map和Set中对象的引用都是强类型化的,并不会允许垃圾回收.这样一来,如 ...

  4. 三分钟分布式CAP理论

    分布式系统架构理论,定义了三种指标,理论说我们最多只能满足两个. ## 分布式系统 首先我们这个理论所说的分布式系统,是指系统内会共享数据,互相有连接有交互,才能完成系统功能的的分布式系统.而这个理论 ...

  5. Linux vps服务器国产面板wdcp的安装和使用方法

    对于大多数站长来说,稳定的服务器不可或缺,这是我做网站以来的深刻体会,因为之前我在网站运营方面因这个原因吃了很多亏.在这里说出,只希望朋友们不要像我一样.在网站优化过程中,服务器因素导致排名下滑,甚至 ...

  6. 201621123008 《Java程序设计》第12周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 使用流与文件改造你的图书馆管理系统或购物车. 2.1 简述如何 ...

  7. jQuery操作(二)

    一: 操作元素 1. 属性操作 1.1 $("p").text() $("p").html() $(":checkbox").val() 1 ...

  8. \\Device\\PhysicalMemory

    从Windows Server 2003 with SP1 以后就禁用了用户态访问\\Device\\PhysicalMemory,要访读取SMBIOS的信息,请使用以下API:•EnumSystem ...

  9. [Jmeter] 在jenkins上通过命令行运行时,针对单个listener生成的chart报告,并通过邮件发送出来

    We need to use cmdrunner-2.0.jar Firstly, download cmdrunner-2.0.jar from here:https://jmeter-plugin ...

  10. android DatagramSocket send 发送数据出错

    安卓4.0以后好像不能在主线程里面使用 socket 所以不管是发送数据还是接收数据需要新开一个了线程: 以下代码是我点击发送是代码: new Thread(new Runnable() { @Ove ...