触发器

trigger: 由事件来触发某个操作。
事件包括INSERT语句、UPDATE语句和DELETE语句。
当数据库系统执行事件时,就会激活触发器执行操作。

举例理解:

例如,当学生表中增加了一个学生的信息时,学生的总数必须同时改变。可以在这里创建一个触发器,每次增加一个学生的记录,就执行一次计算学生总数的操作。这样就可以保证每次增加学生的记录后,学生总数是与记录数是一致的。

单个执行语句的触发器

create trigger 触发器名字
before|after 触发事件
on 表名 for each row 执行语句

多个执行语句的触发器

create trigger 触发器名字
before|after 触发事件
begin
执行语句
end

使用规则

  1. 触发器必须有名字,最多64个字符
  2. 触发时间: BEFORE | AFTER
    执行的时间设置:INSERT | UPDATE | DELETE
  3. 触发事件前后
    设定触发的事件:它们可以在执行insert、update或delete的过程中触发。
  4. 触发间隔
    触发器的执行间隔:FOR EACH ROW子句通知触发器
    每隔一行执行一次动作,而不是对整个表执行一次。

例子

创建两个表


create table goods(gid int,name varchar(20),num smallint
);
create table ord(oid int,gid int,much smallint
);
插入数据```sql
insert into goods values(1,'cat',40);
insert into goods values(2,'dog',63);
insert into goods values(3,'pig',87);
插入触发器
```sql
create trigger t1
after insert on ord for each row
beginupdate goods set num = num-1 where gid =1;
end

创建 触发器 t1
在insert 命令 对 ord这个表 之后
执行的语句为:
更新goods表 的num这一列/字段
让其 中gid=1这一行的num数减去1

SQL练习题

描述

构造一个触发器audit_log,在向employees_test表中插入一条数据的时候,触发插入相关的数据到audit中。

CREATE TABLE employees_test(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
CREATE TABLE audit(
EMP_no INT NOT NULL,
NAME TEXT NOT NULL
);

后台会往employees_test插入一条数据:

INSERT INTO employees_test (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Paul', 32, 'California', 20000.00 );

然后从audit里面使用查询语句:

select * from audit;

解题

create trigger audit_log
after insert on employees_test for each row
begin
insert into audit values(new.id,new.name);
end

old与new:
MySQL 中定义了 NEW 和 OLD,用来表示触发器的所在表中,触发了触发器的那一行数据,来引用触发器中发生变化的记录内容,具体地:

 ①在INSERT型触发器中,NEW用来表示将要(BEFORE)或已经(AFTER)插入的新数据;②在UPDATE型触发器中,OLD用来表示将要或已经被修改的原数据,NEW用来表示将要或已经修改为的新数据;③在DELETE型触发器中,OLD用来表示将要或已经被删除的原数据;

Mysql 构造一个触发器 audit_log相关推荐

  1. MySQL存储过程和触发器的实现--数据库学习笔记

    从MySQL5.0版本开始就对存储过程和触发器进行了支持,在MySQL进行学习前,先查看您所使用的版本吧,方法有: 1.$mysql -V  //linux终端下 2.select version() ...

  2. Mysql高级之触发器

    原文:Mysql高级之触发器 触发器是一类特殊的事务 ,可以监视某种数据操作(insert/update/delete),并触发相关操作(insert/update/delete). 看以下事件: 完 ...

  3. mysql创建删除触发器的时候_mysql触发器简介及如何创建和删除触发器

    什么是mysql触发器 需要MySQL 5 对触发器的支持是在MySQL 5中增加的.因此,本章内容适用于MySQL 5或之后的版本. MySQL语句在需要时被执行,存储过程也是如此.但是,如果你想要 ...

  4. Oracle使用触发器和mysql中使用触发器的比较

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

  5. mysql 动态传入表名 存储过程_面试再问MySQL存储过程和触发器就把这篇文章给他...

    Mysql存储过程及触发器trigger 存储过程 一.一个简单的存储过程 1,一个简单的存储过程 delimiter $$create procedure testa()begin Select * ...

  6. MySQL数据库:触发器Trigger

    一.什么是触发器: 触发器是与表有关的数据库对象,当触发器所在表上出现指定事件并满足定义条件的时候,将执行触发器中定义的语句集合.触发器的这种特性可以协助应用在数据库端确保数据的完整性.触发器是一个特 ...

  7. oracle触发器比较,Oracle使用触发器和mysql中使用触发器的比较

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

  8. MySQL的学习--触发器

    转载自https://www.cnblogs.com/CraryPrimitiveMan/p/4206942.html MySQL包含对触发器的支持.触发器是一种与表操作有关的数据库对象,当触发器所在 ...

  9. MySQL存储过程+游标+触发器

    [0]README 0.1)本文旨在 arrange mysql 存储过程及如何在存储中使用游标  的相关知识: 0.2)delimieter的用法:参见 http://blog.csdn.net/p ...

最新文章

  1. Struct 和 Class 性能有差异吗?自己测试
  2. 021_jdbc-mysql入门
  3. JavaScript、HTML、CSS学习—思维导图
  4. 训练时loss:0.000e+00_其他品牌还在找不到00后营销方向盘时,小度智能音箱发车了…....
  5. mysql设计表月份_mysql,表设计
  6. [内核摘要] 虚拟文件系统
  7. videojs默认显示controls 按钮功能失效_一文看懂Yearning SQL审核平台功能模块设计...
  8. dubbo之rmi协议使用
  9. 代码雨代码源复制_两步教你打造一个代码雨动态壁纸效果,代码可以设置为名字...
  10. 微信小程序直播电脑端OBS推流直播教程
  11. 一杯咖啡带你读懂状态机
  12. 三星手机刷机后显示无服务器,三星刷机后丢失基带别担心,轻松几步解决问题...
  13. 机器学习实战(11)——初识人工神经网络
  14. javaw.exe是什么进程?
  15. mysql alter 改密码_MySql修改密码
  16. i7 1255u和i5 1135G7哪个好
  17. 09 七段-复利:营造长期的局部垄断
  18. 制作视频剪辑,自动剪辑视频的软件如何剪辑
  19. QMS-云质-质量管理软件-如何助力质量人员提高工作效率与绩效—供应商质量评审
  20. 基于用户id的最优邀请码生成方案

热门文章

  1. matlab的数值积分
  2. BUUCTF WEB [BJDCTF2020]ZJCTF,不过如此
  3. Microsoft PlayReady DRM及其工作原理
  4. 中小企业如何危中求机?接住这套私域流量低成本解决方案!
  5. 光标飞控硬件架构设计与原理
  6. vim配置参考备忘-------嵌入式
  7. AI测试与传统测试不同,需要考虑十个要点--新梦想软件测试
  8. 听云短信接口安全测试,你的短信接口到底有多危险,可能瞬间损失过万,短信接口防盗刷测试
  9. 经纬度转换XY坐标,并计算距离
  10. 让你的APP实现即时聊天功能