小贝_mysql 触发器使用

触发器

简要

1、触发器基本概念

2、触发器语法及实战例子

3、before和after区别

一、触发器基本概念

1、一触即发

2、作用: 监视某种情况并触发某种操作

3、观察场景

一个电子商城:

商品表,goods


主键(goods_id)


商品名称(goods_name)


库存(goods_number)


1


iphone6


10


2


小米手机


28

订单表,orders


订单主键(order_id)


商品主键(goods_id)


购买数量(buy_num)


1


2


3


2


1


4

从php的角度看,完成下单与减少库存的逻辑如下:

a、下单后,往orders表插入数据:

insert into orders(goods_id,bug_num)values(2,3);

b、修改goods对应商品的库存:

update goods setgoods_number=goods_number-3 where goods_id=2;

总结: 这两个逻辑可以看成是一个整体,或者说,insert—>触发update

处理方案: 使用触发器来解决上述问题,我们可以监视某张表的变化,当发生某种变化时,触发某个操作

4、触发器监视以及触发什么变化

a、监视update/insert/delete

b、触发update/insert/delete

二、触发器语法

1、创建语法的四个要素

2、创建触发器

2.1、测试案例的表结构


#商品表

create table goods

(goods_id int,goods_name varchar(10),goods_number smallint)charset=utf8;

insert into goods

values(1,‘iphone6‘,10),(2,‘小米手机‘,28);


#订单表

create table orders

(order_id int,goods_id int,buy_num smallint)charset=utf8;

insert into orders

values(1,2,3),(2,1,4);

2.2、创建触发器语法

createtrigger triggerName

after/beforeinsert/update/deleteon Table

begin

sql语句(一句或多句sql)

end;

2.3、触发器实例

2.3.1、建立触发器,往订单表orders插入数据时,更新商品表goods的库存量

往orders表插入数据前,各个表的数据如下

往orders表插入数据:

查看goods表的数据:

此时,orders表插入的是iphone6两台,但是减少的却是小米手机商品的库存。

当往orders表插入的是小米手机两台呢?

此时,减少的也是小米手机,但是减少的是1,而不是2

问题:出在哪里?

1、查看刚建立的触发器信息

原来触发的sql语句是固定某个商品id的,因此,触发只对该商品id发生作用

2、如何在触发器引用行的值?

对于insert而言,新增的行,用new来表示,行中的每一列的值,用new.列名来表示

3、修改触发器t1(删除原来重新建立)

4、验证结果

插入前,各个表数据如下

插入orders表,iPhone6三台

插入orders表,小米手机五台

2.3.2、建立触发器,往订单表orders删除数据时,更新商品表goods的库存量

a、建立触发器t2

b、删除orders的数据

b1、删除前,各个表数据

b2、删除后,各个表数据:

总结:

对于delete而言,如何在触发器引用行的值?

对于delete操作来说,它要操作的数据,已经是存在表中了,因此用old来表示,行中的每一列的值,用old.列名来表示

2.3.3、建立触发器,往订单表orders修改数据时,更新商品表goods的库存量

a、创建触发器t3

b、修改orders表数据

b1、修改前,各个表的数据

b2、修改后,各个表的数据

总结:

对于update而言,如何在触发器引用行的值?

对于update操作来说,它要操作的数据,已经是存在表中了,因此用old来引用修改前的值,修改后则为用new来引用新值

2.4、查看触发器和删除触发器语法

2.4.1、查看所有触发器

2.4.2、查看某个触发器

2.4.3、删除触发器

三、before与after的区别

1、区别:

a、after是先完成数据的增删改后,再触发

触发中的语句晚于增删改,无法影响前面的增删改动作

b、before是先完成触发,再增删改

触发的语句先于监视的增删改发生,我们有机会判断,修改即将发生的操作

2、案例:

对于所下订单进行判断,如果订单的数据>5,则认为是非法订单,强制把所订商品数据改成5

2.1、建立触发器

2.2、插入前,各个表的数据

2.3、插入后,各个表的数据

The quieter you become,the more you are able to hear!

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-25 12:39:16

小贝_mysql 触发器使用的相关文章

小贝_mysql分区理论学习

mysql分区 简要: 一.为什么需要mysql分区 二.mysql分区的类型 三.mysql分区技术对比 一.为什么需要mysql分区 1.首先,业务数据增大时,必然会影响数据操作.通常针对大数据,有如下优化方法: a.大表拆小表 b.sql语句优化 2.不足: a.sql语句优化可以通过增加索引等来调整,但是随着数据量增大时将会导致索引的维护代价增大 b.大表拆分小表可以在细分为垂直or水平分表.但是需要实现逻辑操作.即选择那张表 3.总结: 针对大数据,添加索引会导致索引文件大以及维护索引

小贝_mysql优化学习

mysql优化 简要: 1.数据库设计优化 2.sql语句优化 3.表分割 4.读写分离技术 一.数据库设计优化 1.表设计要符合三范式,当然,有时也需要适当的逆范式 2.什么是三范式 一范式: 具有原子性,不可再分割 二范式: 在满足一范式的基础上,我们考虑是否满足二范式.只要表的记录满足唯一性,也是说,同一张表,不可能出现完全相同的记录,一般说,在表中设计一个主键即可. 三范式: 在满足二范式的基础上,我们考虑是否满足三范式.只要表满足没冗余性. 二.SQL语句优化 1.sql优化的一般步骤

小贝_mysql分区实例

mysql分区实验 简要: 一.按照分区类型建立分区 二.管理分区 三.分区与未分区表例子 一.建立分区以hash分区为例 (1).非线性hash分区 1.测试表t_hash结构 create table t_hash (id int unsigned, name char(1) )engine=myisam charset=utf8 partition by hash(id) partitions 5; 2.t_hash表物理文件结构 3.往t_hash表插入数据 4.查看表t_hash物理结

小贝_mysql建表以及列属性

mysql建表以及列属性 简要: 一.建表原则 二.详细的列属性说明 一.建表原则 建表: 其实就是声明列的过程,数据最终是以文件的形式放在硬盘(内存) 列: 不同的列类型占的空间不一样. 选列的原则: 够用,不浪费 二.列类型以及属性说明 列类型有: 整形.浮点型.字符型.日期/时间型 2.1.整形 tinyint/smallint/mediumint/int/bigint 2.1.1.详解tinyint 一个字节 [][][][][][][][]共8位 假设8为都为0 ==> 转化为十进制

小贝_mysql表优化

mysql表优化 简要:        一.分析表 二.检查表 三.优化表 四.表数据导入 五.锁表操作 一.分析表 1.1.命令: ANALYZE [NO_WRITE_TO_BINLOG | LOCAL]TABLE tbl_name [, tbl_name] ... 1.2.作用: 本语句用于分析和存储表的keyword分布.分析的结果将可以使得系统得到准确的统计信息,使得sql可以生成正确的行计划 1.3.不足: 在分析期间,会对表进行读锁操作 1.4.样例: 二.检查表 2.1.命令 CH

小贝_mysql select连接查询

select连接查询 简要: 一.union联合查询 二.左右内连接 一.union联合查询 作用: 把2次或多次查询结果合并起来 具体: (表1查询结果) union (表2查询结果) 运行: 先算表1查询结果,再算表2查询结果.再通过union把结果联合起来. 总结: a.左右查询结果列数一致 b.终于显示结果以第一张表的列名为主 c.左右查询结果的列类型最好也一致.不然就会进行转换. 由低到高.如表1结果A列为整形,表2结果A列为浮点型.则表1在A列的结果转换为浮点型 d.能够是不同表 e

小贝_mysql数据库备份与恢复

mysql数据库备份与恢复 简要:        一.数据库备份 二.数据库恢复 一.数据库备份 1.备份简单说明 : 系统运行中,增量备份与整体备份 例: 每周日整体备份一次,周一到周六备份当天 如果周五出了问题,则可以用周日的整体+周一,二,三,四来恢复 2.备份工具 a.第三方收费备份工具 b.系统自带备份功能即mysqldump(可以导出库.表) c.利用outfile和infile 2.1.mysqldump使用例子 例1.导出某个库下的表 mysqldump–u用户名 –p密码库名

小贝_mysql主从复制作用以及案例

mysql主从复制 简要: 一.mysql用户授权 二.mysql bin-log日志 三.mysql主从复制 一.mysql用户授权 1.命令 2.作用:进行权限控制 3.例子: (备注: 允许用户xiaobei从localhost访问mysql,而且需要密码验证,密码为xiaobei) 4.查看mysql用户权限表 二.bin-log日志 1.查看bin-log是否开启 2.开启bin-log日志 修改配置文件 [mysqld] log-bin=mysql-bin 3.重启mysql服务器,

小贝_mysql sql语句优化过程

sql语句优化 一.SQL优化的一般步骤 (1).通过show status命令了解各种SQL的执行频率. (2).定位执行效率较低的SQL语句-(重点select) (3).通过explain分析低效率的SQL语句的执行情况 (4).确定问题并采取相应的优化措施 (1) 通过showstatus命令了解各种SQL的执行频率 MySQL客户端连接成功后,通过使用show[session|global] status 命令可以提供服务器状态信息.其中的session来表示当前的连接的统计结果,gl