MySQL 语句在需要时被执行,存储过程也是,但是你要是想要某条(或某些语句)在事件发生时自动执行,该怎么办触发器由此而来

触发器:某个表发生更改时自动处理。触发器是MySQL响应delete,insert,update(增加,删除,修改)时,自动执行的一条MySQL语句,或位于begin和end语句之间的一组语句,

ALTER:触发器将在(delete,insert,update) 语句成功后执行,

BEFORE:触发器将在(delete,insert,update) 语句前执行。

版本:于MySQL5 中增加,适用于MySQL5或之后的版本

如以下情景:1、每当增加一个顾客到某个数据库表时,都检查其电话号码格式是否正确,州的缩写是否为大写  2、每当订购一个产品时,都从库存数量中减去订购数量  3、无论何时删除一行,都在某个存档表中保留一个副本

创建触发器的主要步骤、

1、唯一的触发器名

2、触发器关联的表

3、触发器应该响应的活动(delete,insert,update)

4、触发器何时执行(处理之前或之后)

注意:在mysql 5中触发器名必须在每个表中唯一,但不是在每个数据库中唯一,虽然允许在同一个库中的两个表,有相同名字的触发器,但是最好在数据库范围内使用唯一的触发器名。

-- create trigger 触发器名

1111

CREATE TRIGGER 用来创建名为 tri_vendors 的新触发器。触发器可在一个操作发生前或之后执行,这里给出了ALTER INSERT,所以此触发器将在INSERT 语句成功后执行。这个触发器还指定FOR EACH ROW,因此代码对每个插入行执行,文本 add a vendor 将对每个插入的行显示一次。

为了测试这个触发器,使用insert 语句添加一行或多行到 vendors中,当成功插入后显示add a vendor

只有表才支持触发器,视图不支持(临时表也不支持)

触发器按每个表每个事件每次的定义,每个表每个事件每次只允许一个触发器。因此每个表最多支持6个触发器(每条insert,update,delete之前和之后)

单一触发器不能与多个事件或多个表关联,所以如果你需要对一个insert 和update 操作执行的触发器,则应该定义两个触发器。

如果BEFORE 触发器失败,则MySQL将不执行请求的操作。此外如果before 触发器或语句本身失败,MySQL将不执行AFTER 触发器

删除触发器(DROP TRIGGER)

drop trigger 触发器名字

触发器不能更新或覆盖,为了修改一个触发器,必须删除它,然后再重新创建

使用触发器

ONE、INSERT 触发器

insert 触发器在insert 语句之前或之后执行。

1、在insert 触发器代码内,可引用一个名为 NEW 的虚拟表,访问被插入的行

2、在before insert 触发器,new中的值也可以被更新(允许更改被插入的值)

3、对于auto_increment 列,new 在insert 执行之前含0,在inset 执行之后包含新的自动生成值。

create 

11

创建一个名为tri_neworders的触发器,他按照after insert on orders 执行。在插入一个新订单到orders 表时,MySQL生成一个新的订单号并保存到order_num 中,触发器从 NEW.order_num 取得这个值并返回他,此触发器必须按照after insert 执行,因为在before insert 语句执行之前,新order_num 还没有生成,对于orders 的每次插入使用这个触发器将总是返回新的订单号。

将defore 用于数据验证和净化(目的是保证插入表中的数据确实是需要的数据),

TWO、DELETE 触发器

delete 触发器在delete 语句执行之前或之后执行

在delete 触发器代码内,你可以引用一个名为old 的虚拟表,访问被删除的行

old 中的值全部都是只读的,不能更新

mysql

在任意订单删除前将执行此触发器。它使用一条insert语句将old 中的值(即要删除的订单),保存到一个名为 test_orders 的表中

注意: test_orders 和 archive_orders这两个表的列和列的数据类型要一致

使用before delete 触发器相对于after delete 触发器的优点为:

如果(before delete 触发器)由于某种原因订单不能存档,delete 本身将被放弃

上述,触发器(trigger) 使用begin 和end 语句标记触发器体,的好处是触发器能容纳多条sql 语句。

Three、UPDATE 触发器

update 触发器在update 语句执行之前或之后执行

1、在update 触发器代码中,你可以引用一个名为old的虚拟表访问以前(update 语句前) 的值,引用一个名为new 的虚拟表访问新更新的值

2、在before update 触发器中,new 中的值可能被更新(允许更改将要用于update 语句中的值)

3、old 中的值全都是只读的,不能更新。

mysql

任何数据净化都需要在update语句之前进行,就想这个例子中一样,每次更新一个行时,new.vend_state中的值(将用来更新表行的值)都用upper(new.vend_state)替换。

end!!!

1、与其他DBMS 相比,MySQL 5 中支持的触发器相当初级,未来的MySQL版本中有一些改进和增强触发器支持的计划。

2、创建触发器可能需要特殊的安全访问权限,但是触发器的执行时是自动的。如果insert、update和 delete语句能够执行,则相关的触发器也能执行

3、应该用触发器来保证数据的一致性(大小写、格式等),在触发器中执行这种类型的处理的优点是他总是进行这种处理,而且是透明地进行,与客户机应用无关。

4、触发器的一种非常有意义的使用是创建审计跟踪。使用触发器,把更改(如果需要,甚至还有之前和之后的状态)记录到另一个表非常容易。

5、遗憾的是,MySQL触发器中不支持call 语句,这表示不能从触发器内调用存储过程,所需的存储过程代码需要复制到触发器内。

mysql delete语句_MySQL ------ 触发器(TRIGGER)(二十七)相关推荐

  1. mysql delete 语法_MySQL DELETE 语句

    MySQL DELETE 语句 你可以使用 SQL 的 DELETE FROM 命令来删除 MySQL 数据表中的记录. 你可以在mysql>命令提示符或PHP脚本中执行该命令. 语法 以下是S ...

  2. 零基础带你学习MySQL—Delete语句以及注意事项(九)

    零基础带你学习MySQL-Delete语句以及注意事项(九) 一.Delete语句的基本语法 二.Delete语句的注意事项

  3. MySQL DELETE 语句的一个简单介绍

    MySQL DELETE 语句 你可以使用 SQL 的 DELETE FROM 命令来删除 MySQL 数据表中的记录. 你可以在 mysql> 命令提示符或 PHP 脚本中执行该命令. 语法 ...

  4. MySQL delete 语句

    mysql 中delete语句主要分为三个层次,下面简单介绍下 1. 最基础的条件删除,如下所示 DELETE FROM table_name where table_name.name='dell' ...

  5. mysql的delete语句_mysql删除语句

    展开全部 mysql删除语句如下: 1.delete删除一行:delete from student where id=1. 2.delete删除多行:delete from student wher ...

  6. mysql 锁设置_MySQL锁之二:锁相关的配置参数

    锁相关的配置参数: mysql> SHOW VARIABLES LIKE '%timeout%';+-----------------------------+----------+ | Var ...

  7. mysql连接语句_mysql 连接语句

    在 SELECT 语句中,如果 FROM 子句引用了多个表源或视图,可以使用 JOIN 指示指定的联接操作应在指定的表源或视图之间执行. 一.交叉联接:CROSS JOIN 交叉联接将执行一个叉积(迪 ...

  8. mysql经典语句_Mysql经典语句

    一.查看当前的数据库:     SHOW DATABASES; 二.查看当前数据库中的所有表: SHOW TABLES; 三.创建一个新的数据库:CREATE DATABASE数据库名; 四.启动和停 ...

  9. mysql 查询语句_MySQL相关(一)- 一条查询语句是如何执行的

    前言 学习一个新知识最好的方式就是上官网,所以我先把官网贴出来 MySQL官网 (点击查阅),如果大家有想了解我没有说到的东西可以直接上官网看哈~目前 MySQL 最新大版本为8.0,但是鉴于目前应用 ...

最新文章

  1. active mq topic消费后删除_Spring cloud stream 整合mq
  2. 大数据分布式集群搭建(5)
  3. 面试官:Redis的事务满足原子性吗?
  4. django的ajax_get请求
  5. Mac上的IDEA安装配置maven
  6. linux mint 18安装中文,无法在Linux Mint 18.1“Serena”下安装pyFFTW
  7. ES6躬行记(3)——解构
  8. android api文档中文版_干货分享 | Android 存储空间的最佳实践 (下)
  9. java专用英语词典软件_英语词典app哪个好 5款好用的英语词典app推荐
  10. 计算机毕业设计:基于springboot框架开发的办公自动化OA系统
  11. three.js 05-01 之 PlaneGeometry 几何体
  12. HTML5游戏引擎(一)-egret引擎简介——一个开源免费的游戏框架
  13. T2695 桶哥的问题——送桶 题解
  14. 山东新高考604分怎么报计算机专业,山东2017高考604分适合报考哪些211学校
  15. 百度地图动态修改图标
  16. 如何安装python自带的pip_python自带的pip在哪里
  17. 2021CCPC上海省赛题解ABCDEGHIJK
  18. 手机物流详情页面模板.
  19. OpenAI发布新算法MuseNet,让甲壳虫乐队与LadyGaga一起演奏
  20. 转solarwinds-NPM.12.3安装流程安装方法

热门文章

  1. vnc viewer通过浏览器_浏览器中的Ubuntu 20.04 LTS(Focal Fossa)
  2. 如何设计数据库表实现完整的RBAC(基于角色权限控制)
  3. mysql 查看个人版,MySQL系列-权限管理
  4. ceph linux内核配置,centos 7.4-aarch64如何编译Ceph
  5. 深度学习之基于CNN和VGG19实现灵笼人物识别
  6. n个一位数字的数组中选取任意数目的数字,构成的3的最大倍数是多少?
  7. Dreamoon Likes Sequences CodeForces - 1330D(组合数学+位运算)
  8. codeforces 1041a(水题)
  9. 小程序开发学习(4)---天气预报接口API篇
  10. HFSS报错A geometry selection is required for selection