深入学习MYSQL-使用触发器

这篇具有很好参考价值的文章主要介绍了深入学习MYSQL-使用触发器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

触发器

每个表最多支持6个触发器,(insert,update,delete)之前和之后。

  • 删除触发器
drop trigger trigger_name;
  • insert 触发器
     在INSERT触发器代码内,可引用一个名为NEW的虚拟表,访问被插入的行;
     在BEFORE INSERT触发器中,NEW中的值也可以被更新(允许更改被插入的值);
     对于AUTO_INCREMENT列,NEW在INSERT执行之前包含0,在INSERT执行之后包含新的自动生成值。
    下面来看例子(这里书上的例子尽然不可以,不知道是不是版本的原因):
    首先我们创建一个表用于记录日志
CREATE TABLE product_log (
    log_id INT AUTO_INCREMENT PRIMARY KEY,
    prod_id VARCHAR(50),
    action VARCHAR(50),
    action_date DATETIME
);

创建一个触发器

DELIMITER $$
CREATE TRIGGER newproduct 
AFTER INSERT 
ON products 
FOR EACH ROW 
BEGIN
--这个new 虚拟表可以拿到插入后的值
   INSERT INTO product_log(prod_id, action, action_date) 
   VALUES (NEW.prod_id, 'product added', NOW());
END;$$
DELIMITER ;

深入学习MYSQL-使用触发器
同时我们是可以在插入之前修改值的

DELIMITER $$
CREATE TRIGGER beforeinsert 
BEFORE INSERT 
ON products 
FOR EACH ROW 
BEGIN
-- 插入之前更新值
   set NEW.prod_price = 111.0;
END;$$
INSERT INTO `products` VALUES ('ANV10', 1001, '.5 ton anvil', 5.99, '.5 ton anvil, black, complete with handy hook');

我们可以看到执行结果,我们插入里面写的是5.99但是最终存储是111.0是因为在插入之前我们更新了这个值
深入学习MYSQL-使用触发器
注:这里还有一点在使用before更新值的时候,我们这个列不能是外键,外键是不能更新成功的。主键可以被更新。

  • update触发器
     在UPDATE触发器代码中,你可以引用一个名为OLD的虚拟表访问以前(UPDATE语句前)的值,引用一个名为NEW的虚拟表访问新更新的值;
     在BEFORE UPDATE触发器中,NEW中的值可能也被更新(允许更改将要用于UPDATE语句中的值);
     OLD中的值全都是只读的,不能更新。
    下面我们来看一个例子:
CREATE TABLE test_update(
	id int not null auto_increment primary key,
	before_id char(50) not null,
	after_id char(50) not null
);
DELIMITER $$
CREATE TRIGGER afterupdate 
AFTER UPDATE 
ON products 
FOR EACH ROW 
BEGIN
   INSERT INTO test_update(before_id,after_id)values(old.prod_id,new.prod_id);
END;$$

深入学习MYSQL-使用触发器
在update之前我们也可以new中的值,这个用法和insert一样这里哦不在演示。

  • delete触发器
     在DELETE触发器代码内,你可以引用一个名为OLD的虚拟表,访问被删除的行;
     OLD中的值全都是只读的,不能更新。
    这里直接用了之前的表,只是重新改了个名字测试
DELIMITER $$
CREATE TRIGGER beforedelete 
BEFORE DELETE 
ON products 
FOR EACH ROW 
BEGIN
   INSERT INTO test_delete(before_id,after_id)values(old.prod_id,old.prod_id);
END;$$

深入学习MYSQL-使用触发器
这个在删除之前和删除之后都可以通过old虚拟表拿到值。文章来源地址https://www.toymoban.com/news/detail-446319.html

到了这里,关于深入学习MYSQL-使用触发器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL-触发器

    目录 🍁触发器简介 🍁创建触发器 🍃创建 BEFORE 类型触发器 🍃创建 AFTER 类型触发器 🍁删除触发器(DROP TRIGGER) 🍃删除触发器 🍁语法总结 🍃insert 🍃delete 🍃update 🦐:MySQL专栏         MySQL 数据库中触发器是一个特殊的存储过程,不同的是执行存储过程要使用 CAL

    2024年01月16日
    浏览(42)
  • MySQL 触发器

    触发器是与表有关的数据库对象,指在insert/update/delete之前或之后,触发并执行触发器中定义SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作。 使用别 名OLD 和 NEW 来引用触发器中发生变化的记录内容,这与其他的数据库

    2024年02月08日
    浏览(44)
  • 【MySQL进阶】MySQL触发器详解

    序号 系列文章 7 【MySQL基础】运算符及相关函数详解 8 【MySQL基础】MySQL多表操作详解 9 【MySQL进阶】MySQL事务详解 10 【MySQL进阶】MySQL视图详解 大家好,我是小杨!前面我已经为大家介绍了MySQL中的进阶知识-视图,那么今天我们就给大家讲解MySQL中的触发器这部分的相关内容,

    2024年02月03日
    浏览(55)
  • MySQL---存储函数、触发器

    1. 存储函数 MySQL 存储函数(自定义函数),函数一般用于计算和返回一个值,可以将经常需要使用的计算 或功能写成一个函数。 存储函数和存储过程一样,都是在数据库中定义一些 SQL 语句的集合。 存储函数与存储过程的区别: 存储函数有且只有一个返回值,而存储过程可

    2024年02月05日
    浏览(81)
  • MySQL存储过程和触发器

    存储过程和触发器是数据库中用于执行特定任务的两种重要的数据库对象。它们由SQL语句组成,被预先编译并存储在数据库中,可以通过调用来执行。以下是对存储过程和触发器的简要说明以及如何创建和使用它们: 存储过程(Stored Procedure): 定义: 存储过程是一组SQL语句

    2024年01月21日
    浏览(66)
  • MySQL 存储过程&触发器&事务

    存储过程(Stored Procedure),是为了完成特定功能的SQL语句集。 存储过程可以理解为shell脚本这类型的命令集输出工具,但是在底层,存储过程拥有更多的优点: 语言的灵活性跟功能性更强 ,在原有基础之上可以插入 控制语句、循环语句等 让SQL语句的功能更强,能够完成更

    2024年02月04日
    浏览(71)
  • MySQL数据库触发器

    查看触发器是指查看数据库中已经存在的触发器的定义、状态和语法信息等。MySQL 中查看触发器的方法包括 SHOW TRIGGERS 语句和查询 information_schema 数据库下的 triggers 数据表等。本节将详细介绍这两种查看触发器的方法。 SHOW TRIGGERS语句查看触发器信息 在 MySQL 中,可以通过 S

    2023年04月12日
    浏览(48)
  • MySQL函数、视图、存储过程及触发器

    MySQL在我们工作中都会用到,那么我们最常接触的就是增删改查,而对于增删改查来说,我们更多的是查询。但是面试中,面试官又不会问你什么查询是怎么写的,都是问一些索引啊,事务啊, 底层结构这些东西,所以我打算分四篇去逐一的过一遍MySQL的知识点。 以下为四篇

    2023年04月09日
    浏览(61)
  • MySQL之视图,触发器与存储过程

    视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】,用户使用时只需使用【名称】即可获取结果集,可以将该结果集当做表来使用。 使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据

    2024年02月08日
    浏览(57)
  • MySQL小记——存储过程、触发器、函数、视图

    目录 存储过程 procedure 语法 参数 调用存储过程 call 删除存储过程 drop 带有IF逻辑的存储过程 if then elseif else 带有循环的存储过程 while do 变量 触发器 Trigger 语法 old和new 视图 View 函数 自定义函数 内置函数 存储过程是数据库中的一个对象,存储在服务端,用来封装多条SQL语句

    2024年02月08日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包