mysql delete语句_MySQL ------ 触发器(TRIGGER)(二十七)

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 触发器名

7e14cb20255467ff2c2df63474768d6d.png

1111

06e95aaada1c0115bc3d7221158006b0.png

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 

4e5916dbd103e7023210378ee2849512.png

11

64b6d69ae093138d78f66d8a3a86f980.png

创建一个名为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

cfa92b3258a3b2bc914d0b3faf8e2dbd.png

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

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

7304306c5380e0e194e135e066cdf200.png

使用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

a5e566003f8b1d5a68b368039569599f.png

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

end!!!

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/244379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

aws mysql价格_mysql – AWS RDS“转出”成本有多贵?

我在AWS上托管了一个社交网络网站.我是否会因RDS的“转移成本”而被收取费用(因为RDS将通过AWS连接到EC2)?这是否意味着我只需支付EC2’转账费用’?与“图像”带宽相比,“数据库”带宽有多贵?真的很感激任何输入.谢谢.解决方法:根据AWS文档,从…

python变量定义大全_详解python变量与数据类型

这篇文章我们学习 Python 变量与数据类型变量变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念,变量可以通过变量名访问。在 Python 中 变量命名规定,必须是大小写英文,数字和 下划线(_)的组合,并且不能…

java 数据库改操作_数据库的插入、修改、删除操作(java实现)

import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class JDBCTest {// 定义数据库访问参数String url "jdbc:sqlserver://localhost:1433; DatabaseNamelihongchao&…

python3安装pywin32_Python3 pywin32模块安装的详细步骤

python新手一枚,操作系统Win10 64 bit,Python版本,3.7因为某个脚本需要用到win32con 和win32api模块,run -- cmd ,使用easy_install pywin32 命令安装,提示错误,搜不到,网上搜了下教程&#x…

创建时间指定日期 java,Java避坑之如何创建指定时间Date对象

在翻看自己以前写的惨不忍睹的代码时,发现了自己曾经写的一个跟Date有关的坑。Date date new Date(2020, 1, 1);System.out.println(date);我的目的是想创建一个2020年1月1日的时间对象date,但是我们创建的date真的就代表2020年1月1日吗?错&…

pagerank数据集_从数据结构到算法:图网络方法初探

机器之心原创作者:朱梓豪编辑:Qing Lin如果说 2019 年机器学习领域什么方向最火,那么必然有图神经网络的一席之地。其实早在很多年前,图神经网络就以图嵌入、图表示学习、网络嵌入等别名呈现出来,其实所有的这些方法本…

php curl上传文件返回false,php curl上传文件$_FILES为空的问题

PHP 5.0~5.6 各版本兼容的cURL文件上传最近做的一个需求,使用PHP cURL上传文件。踩坑若干,整理如下。不同版本PHP之间cURL的区别PHP的cURL支持通过给CURL_POSTFIELDS传递关联数组(而不是字符串)来生成multipart/form-data的POST请求。传统上,…

python判断几个数最大最小_python 找出list中最大或者最小几个数的索引方法

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台&…

netty 客户端断开 异常处理_netty案例,netty4.1基础入门篇八《NettyClient半包粘包处理》发数据方式》...

小傅哥 | https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获。专注于原创专题案例编写,目前已完成的专题有;Netty4.x实战专题案例、用Java实现JVM、基于JavaAgent的全链路监控、手写RPC框架、架构设计专题案例、源码分析等。你…

Java Windows注销用户,中止Windows从Java注销

EDIT2对于那些跟随讨论的人,我留下了我的第一个答案,但似乎他们没有工作。首先找到我的真正解决方案好吧,所以我认为这实际上有效,但它并不完全可以接受,因为它使用了受限制的API部分(但它自Java 1.3以来就存在并且仍然…

python generator_Python Generator漫谈

作为一个Python初学者, Python的格式化语法让众多编程小白追捧, 它的语法糖让代码变得简洁易读,它的庞大开源库让它在各个领域都能发挥作用. 但我时常感受到这个门槛极低的语言远没有表面上看起来易懂易用. 在Python的学习之路上, 我也时常迷茫于自己是否真正掌握了…

php5.5 连接数据库,php5.5 session_set_save_handler 连接数据库问题

好久前忘了在什么地方抄来的,一直好用,但是升级到PHP5.5就不好用了 出现警告服务器无法修改PHP.ini 只好自己试着用mysqli写 但是一直写不出来 请高手指教!!谢谢回复讨论(解决方案)把 mysql_ 都改成 mysqli_>把 mysql_ 都改成 …

python获取屏幕文字_详解:四种方法教你对Python获取屏幕截图(PyQt , pyautogui)...

前言:今天为大家带来的内容是详解:四种方法教你对Python获取屏幕截图(PyQt , pyautogui)本文具有不错的参考意义,希望能够帮助到大家!Python获取电脑截图有多种方式,具体如下:1. PIL中的ImageGrab模块2. wi…

支付宝php异步回调,支付宝支付成功之后异步回调处理

/*** alipay_notify.php.* User: lvfk* Date: 2017/10/26 0026* Time: 13:48* Desc: 支付宝支付成功异步通知*/include_once (__DIR__./../alipay-sdk-PHP-20171023143822/AopSdk.php);//验证签名$aop new \AopClient();$aop->alipayrsaPublicKey \Comm\Pay\Alipay::ALIPA…

python frame如何置顶_Python tkinter frame父窗口小部件排列列

我把滚动条放在一个框架里,框架放在一个小部件里。这个框架上面有一个标签。上面的标签有三列。带有滚动条的框架有三列。我无法让框架内和框架上方的三根柱子对齐。在如果您能帮我排好纵队,我们将不胜感激。谢谢。在以下是MWE:import tkinte…

MySQL和mq一致性,Mysql与Redis一致性问题

缓存一致性产生背景如果每次频繁的访问数据库的时候,虽然查询底层使用B树索引 但还会做磁盘的IO操作,可能会对数据库的压力非常大。所以为了能够减轻数据库的访问压力,会使用一些缓存实现减轻数据库的压力。比如 Redis、es、ehcache、oscache…

python boolean_Python成为专业人士笔记-Boolean 布尔操作符研究

专业人士笔记”系列目录:创帆云:Python成为专业人士笔记--强烈建议收藏!每日持续更新!​zhuanlan.zhihu.com‘and’ 和 ‘or’ 并不一定返回一个布尔值当使用or时,如果为真,它将返回表达式中的第一个值&…

python八大选择排序_python之八大排序方法

排序方法 平均情况 最好情况 最坏情况 辅助空间 稳定性冒泡排序 O(n^2) O(n) O(n^2) O(1) 稳定选择排序 O(n^2) O(n^2) O(n^2) O(1) 不稳定插入…

int arr 13 java,java学习13 - 数组的定义、操作、异常、二维数组

续java学习12:1、数组,引用类型变量,保存数据实际是保存的数组的首地址2、定义数组容器三要素,数据类型,大小(长度),数组名3、数组的定义公式一:数据类型[] 数组名 new 数据类型[元素个数或数组长度]4、数…

clustalw序列比对_序列比对(二)

Homology is the central concept for all of biology.——David Wake. Science, 1994前言正如前面引用的这句话,同源性是生物学中的核心问题。研究序列的同源性问题,就要用到序列比对的工具,上一篇笔记简单介绍了序列比对的原理,…