触发器:触发器的使用场景以及相应版本:触发器可以使用的MySQL版本:- 版本:MySQL5以上### 使用场景例子:1. 每当增加一个顾客到某个数据库表时,都检查其每当增加一个顾客到某个数据库表时,都检查其电话号码格式是否正确,州的缩写

触发器:

触发器的使用场景以及相应版本:

触发器可以使用的MySQL版本:

版本:MySQL5以上

使用场景例子:

每当增加一个顾客到某个数据库表时,都检查其电话号码格式是否正确,州的缩写是否为大写

每当订购一个产品时,都从库存数量中减去订购的数量

无论何时删除一行,都在某个存档表中保留一个副本

即:在某个表发生更改时自动处理。

如遇到触发器报错“Not allowed to return a result set from a trigger”;请划到最后看详解;

触发器的使用:

创建基本的触发器:

CREATE TRIGGER newproduct AFTER INSERT on products FOR EACH ROW

BEGIN

DECLARE msg VARCHAR(100);

SET msg = "products added";

SIGNAL SQLSTATE "HY000" SET message_text = msg;

END

结果:

INSERT INTO products VALUES("demo2","1003","xiaoguo","66.6","hello world")

> 1644 - products added

> 时间: 0.035s

解释:

首先创建一个触发器:

#newproduct 触发器的名字

CREATE TRIGGER newproduct

触发的时机:

BEFORE:触发器在触发他们的语句之前触发

AFTER:触发器在触发他们的语句完成后触发

在这里我们使用的after;也就是在插入结束后触发条件;

DECLARE msg VARCHAR(100);

注意:declare语句是在复合语句中声明变量的指令;如果不声明msg,执行语句时,MySQL报错;

SIGNAL SQLSTATE "HY000" SET message_text = msg;

如果该SIGNAL语句指示特定SQLSTATE值,则该值用于表示指定的条件

"HY000”被称为“一般错误":

如果命令出现一般错误,则会触发后面的message中的消息;

注:该语句只是个人理解,也是一知半解,如果有更好的解释,欢迎留言。

触发的条件以BEGIN开始,END结束。

触发事件:

insert

update

delete

删除触发器:

-- 删除触发器

DROP TRIGGER newproduct;

INSERT触发器:

insert触发器在insert语句执行之前或者之后执行,需要注意以下几点:

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

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

对于AUTO_INCREMENT列,NEW在insert执行之前包含0,在insert执行之后包含新的自动生成值

例子:插入一个新的订单时,生成一个新的订单号保存到order_num

CREATE TRIGGER neworder AFTER INSERT ON orders for EACH ROW

SELECT NEW.order_num into @ee;

insert INTO orders(order_date,cust_id) VALUES(NOW(),10001);

SELECT @ee as num;

drop TRIGGER neworder;

解释:

创建一个neworder的触发器,在插入之后执行,且对每个插入行执行,在insert中有一个与orders表一摸一样的虚表,用NEW 表示;

SELECT NEW.order_num into @a;

在虚表中找到我们插入的数据的编号,将标号保存在a变量中;

检测:

insert INTO orders(order_date,cust_id) VALUES(NOW(),10001);

SELECT @ee as num;

插入数据,输出插入数据的编号

删除:

drop TRIGGER neworder;

删除触发器。

例二:

在COURSE表上创建触发器,检查插入时是否出现课程名相同的记录,若有则不操作。

CREATE TRIGGER trg_course_in

BEFORE INSERT ON course

FOR EACH ROW

BEGIN

DECLARE msg VARCHAR(100);

IF EXISTS (SELECT * FROM course where cname=NEW.cname) THEN

SET msg="不能输入相同名称的课程";

SIGNAL SQLSTATE "HY000" SET message_text = msg;

END IF;

END

例三:向student表中插入信息时,检查ssex的值必须为男或女。

CREATE TRIGGER trg_ssex AFTER INSERT on student FOR EACH ROW

BEGIN

DECLARE msg VARCHAR(100);

IF(NEW.ssex not in("男","女")) THEN

SET msg ="性别必须为男或女";

SIGNAL SQLSTATE "HY000" SET message_text = msg;

END IF

END

UPDATE触发器:

在update触发器的代码中,可以引用一个名为OLD的虚拟表访问以前的值,即:update未执行前的值,还可以引用一个名为NEW的虚拟表访问新更新的值;

在before update触发器中,NEW中的值可能也被更新(允许修改将要用于update语句中的值);

OLD中的值全部只读,不能更新。

例一:保证州名缩写为大写

CREATE TRIGGER UPDATEevendor BEFORE UPDATE on vendors

FOR EACH ROW SET new.vend_state =UPPER(new.vend_state);

UPDATE vendors SET vend_state="hw" where vend_id="1001";

DROP TRIGGER UPDATEevendor;

注:upper:将文本转换为大写:

例二:不允许修改student表中的学号sno,如果修改该列则显示错误信息并取消操作。

CREATE TRIGGER trg_student_updateSno BEFORE UPDATE

FOR EACH ROW

BEGIN

DECLARE msg VARCHAR(100);

IF NEW.sno <> OLD.sno THEN

SET msg="不允许修改sno";

SIGNAL SQLSTATE "HY000" SET message_text = msg;

END IF;

END

DELETE触发器:

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

在delete触发器代码内,可以引用OLD的虚拟表,访问被删除的行;

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

例子:

使用old保存将要被删除的行到一个存档表中

首先先创建一个与orders相似的表:

CREATE TABLE archive_orders LIKE orders;

-- 创建一个删除的触发器

CREATE TRIGGER deleteorder BEFORE DELETE on orders

for EACH ROW BEGIN

INSERT INTO archive_orders(order_num,order_date,cust_id) VALUES(old.order_num,old.order_date,old.cust_id);

END

解释:

在删除order表中行中信息时,将删除的信息保存到archive_orders中;

删除原表中一行:

DELETE FROM orders WHERE order_num="20014";

查看效果:

SELECT * FROM archive_orders;

结束:

注:如果遇到触发器报错“Not allowed to return a result set from a trigger”

原因:因为从MySQL5以后不支持触发器返回结果集

解决方法:在后面语句后面添加 into @变量名

取数据:select @变量名

详细解释:https://www.programmersought.com/article/3237975256/

创建用户变量:https://blog.csdn.net/JesseYoung/article/details/40779631

感谢各位看到最后!

以上信息来源于网络,如有侵权,请联系站长删除。

mysql触发器访问网站_MySQL触发器使用-WEB资讯专栏-DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录....相关推荐

  1. mysql 视图 中文_Mysql视图-WEB资讯专栏-DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录....

    1.初识视图 1.视图的概念和作用 什么是视图:是从一个或多个表中导出来的表,它是一种虚拟存在的表,表的结构和数据都依赖于基本表. 作用: 简化查询语句:简化用户的查询操作,使 1.初识视图 1.视图 ...

  2. mysql查找语句报错_MYSQL报错注入-WEB资讯专栏-DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录....

    目录 审计思路报错语句报错函数查询表floor报错函数讲解报错原理语句xpath语法报错函数讲解语句整数溢出报错exppowcot列名重复报错name_constjoin using几何函数报错不存在 ...

  3. python资讯_python学习-WEB资讯专栏-DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录....

    模块 module 是一个 Python 文件 以.py 结尾 包含了 Python 函数等语句.先导入 再使用 用模块.函数名调用. 例如1import time time.asctime ( ) ...

  4. zip直链生成网站_调优-WEB资讯专栏-DMOZ中文网站分类目录

    此页面是否是列表页或首页?未找到合适正文内容. Hi ! 我是小小,今天是本周的最后一篇,本篇将会着重讲解关于 JVM 调优和性能监控方面的内容 常用工具 常用工具主要有 JDK 自带工具与 Arth ...

  5. web标准是html5,什么是HTML5-WEB标准专栏-DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录....

    HTML 5是超文本标记语言(HTML)的修订版,第五次重大修改版本:而HTML是用于描述网页内容和外观的标准编程语言.HTML5支持传统的HTML和XHTML样式语法以及其标记,新API,XHTML ...

  6. php时间戳 中文,PHP时间戳-WEB资讯专栏-DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录....

    PHP时间戳UNIX 时间戳(timestamp)是 PHP 中关于时间日期一个很重要的概念,它表示从 1970年1月1日 00:00:00到当前时间的秒数之和.PHP提供了内置函数 time() 来 ...

  7. java多元_Java多元运算符-WEB资讯专栏-DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录....

    虽然可以实现条件判断,但只能获取数字数据,而不能执行功能代码.2.流程控制语句又名:条件控制语句关键字: if . else包含以下几种方式:1.普通条件控制语句语法:if(条件判断语句){条件判断语 ...

  8. python作业网站_怒刷python作业-WEB资讯专栏-DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录....

    以下作业题仅为参考答案 为了锻炼思维的目的 所有的底层操作都是独立实现 尽量少的引包 大家对题有更好的思路和更方便的包欢迎大家多多留言 祝愿大家共同进步1 hello word 略- 2A B A i ...

  9. java 5%3_【Java】位操作符-WEB资讯专栏-DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录....

    位运算符java支持的位运算符有7个,分为两类:位逻辑运算和移位运算.位逻辑运算符包括按位取反(~).按位与( ).按位或(|)和按位异或(^)4种,.移位运算符包括左移( ).右移( )和无符号右移 ...

最新文章

  1. 020_MySQL运算符
  2. [转]VirtualBox 复制VDI 并能创建新的虚拟机
  3. Knative 实战:基于 Kafka 实现消息推送
  4. 一行代码搞定 Scrapy 随机 User-Agent 设置
  5. Jquery使用手册3--css操作 作者:choy
  6. 英国电信公司沃达丰遭到网络攻击
  7. 连接 F5 大 IP 设备
  8. 【渗透测试实战】PHP语言有哪些后门?以及利用方法
  9. python pyqt eric_python+PyQT+Eric安裝配置 | 學步園
  10. 小D课堂 - 零基础入门SpringBoot2.X到实战_第5节 SpringBoot部署war项目到tomcat9和启动原理讲解_23、SpringBoot2.x启动原理概述...
  11. 台电x80h安装linux,Teclast 台电 X80h吃上win10,附实际使用体验
  12. dijkstra 路径搜索算法的c++简单实现
  13. iOS App添加Spotlight搜索(附Swift Demo)
  14. cmdline-tools component is missing
  15. spreadjs学习笔记
  16. linux系统1060的显卡驱动打不上,ubuntu14.04+GTX1060 重新安装显卡驱动
  17. JAVA计算机毕业设计喜枫日料店自助点餐系统(附源码、数据库)
  18. 【opencv学习笔记】025之直方图计算 - calcHist函数详解
  19. 《潮流时装设计——世界顶级时装CAD制板技巧》——1.1 什么是服装CAD
  20. mac删除自带的 ABC 输入法

热门文章

  1. 寒假训练八(优先队列)2020.02.14(7题)
  2. 七年级上学期计算机测试题,七年级英语上学期期末测试题及答案
  3. Java后端笔记 _Static关键字
  4. 大数据时代的最大隐患——信息安全
  5. visio2007或office 2007安装失败提示一个或多个受保护的windows文件导致office 2007安装失败
  6. visio2007 uml模板包
  7. Java基础之IO流(一)
  8. 16. 设计模式之契约原则:如何做好 API 接口设计?
  9. 第一课:数据库的基本操作(表的创建、删除、修改、重命名、主键、截断表)
  10. 如何在抖音官网链接中一键复制微信号跳转微信