深入学习MYSQL-使用触发器

news2024/10/6 12:28:54

触发器

每个表最多支持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 ;

在这里插入图片描述
同时我们是可以在插入之前修改值的

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是因为在插入之前我们更新了这个值
在这里插入图片描述
注:这里还有一点在使用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;$$

在这里插入图片描述
在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;$$

在这里插入图片描述
这个在删除之前和删除之后都可以通过old虚拟表拿到值。

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

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

相关文章

第一章--Java语言概述

一 Java知识脉络图 1.1 Java基础全程脉络图 1.2 本章专题与脉络 二 计算机的硬件与软件 2.1 计算机组成:硬件软件 2.2 CPU、内存与硬盘 CPU(Central Processing Unit,中央处理器) 人靠大脑思考,电脑靠CPU来运算、控…

【beego】bee工具安装使用

bee 工具是一个为了协助快速开发 beego 项目而创建的项目,通过 bee 您可以很容易的进行 beego 项目的创建、热编译、开发、测试、和部署。 1、安装 go get github.com/beego/bee2、配置bee.exe 运行完以上指令后,打开$GOPATH/bin ,我的路径…

刷完这个笔记,17K不能再少了....

大家好,最近有不少小伙伴在后台留言,得准备面试了,又不知道从何下手!为了帮大家节约时间,特意准备了一份面试相关的资料,内容非常的全面,真的可以好好补一补,希望大家在都能拿到理想…

2直接连接的网络与VLAN划分-2.1【实验】【计算机网络】

2直接连接的网络与VLAN划分【实验】【计算机网络】 前言推荐2直接连接的网络与VLAN划分2.1共享式以太网和交换式以太网实验目的实验内容及实验环境实验原理共享式以太网交换式以太网 实验过程搭建实验环境初始化序训练操作共享式以太网-操作交换式以太网查看共享式以太网冲突查…

java中ArrayList顺序表的常见操作

ArrayList常见操作 1.插入操作 尾插 e boolean add(E e) 将 e 插入到 index 位置&#xff08;指定位置插入&#xff09; void add(int index, E element) 尾插 c 中的元素(直接插入一个集合) boolean addAll(Collection<? extends E> c) 将c插入到index位置&#x…

java基础--(一)创建对象在内存中的理解

1、代码 package demo; public class Car {String color;int num;public Car() {}public void run(){System.out.println("color " color);System.out.println("num " num);}public Car(String color, int num) {this.color color;this.num num;} …

2022年美国大学生数学建模竞赛D题数据瘫痪? 使用我们的分析!解题全过程文档及程序

2022年美国大学生数学建模竞赛 D题数据瘫痪? 使用我们的分析! 原题再现&#xff1a; 背景   很多公司将数据视为战略资产&#xff0c;但却很难从中获益。妥善管理这一资源(数据)可以带来竞争优势。因此&#xff0c;公司需要建立一一个集成的数据和分析(D&A) 系统&…

网络中的数据传输模式有哪些-镭速

数据传输模式定义了两个通信设备之间信息流的方向&#xff0c;也称为数据通信或定向模式&#xff0c;同事也规定了信息在计算机网络中从一处流向另一处的方向。 在开放系统互连&#xff08;OSI&#xff09;层模型中&#xff0c;物理层专用于网络中的数据传输。它主要决定数据到…

微信小程序原生开发功能合集十四:登录健权及注册功能实现

本章实现微信自动登录及注册修改功能,包括匿名账号生成、权限自动检测、注册界面及注册流程的实现。   另外还提供小程序开发基础知识讲解课程,包括小程序开发基础知识、组件封装、常用接口组件使用及常用功能实现等内容,具体如下:    1. CSDN课程: https://edu.csdn…

1-SpringBoot工程打包后为何执行Java -Jar就能启动?

本文主要分享SpringBoot工程项目如何打包成一个可直接通过java -jar执行的jar&#xff0c;并且简单分析其启动步骤原理。 文章目录 1.SpringBoot如何打包成一个可执行jar&#xff1f;2.SpringBoot打包成的jar为何可以直接Java -jar执行&#xff1f;3.一窥SpringBoot初启动 1.S…

企业直播该如何做?硬件设备、网络环境、设备连接和观看权限等整个直播流程教程

这是一份面向直播新手的企业直播说明教程&#xff0c;字数较多&#xff0c;完整看完&#xff0c;可能会需要求10分钟&#xff0c;建议您可以【收藏】&#xff0c;如果本文章对您有帮助&#xff0c;就帮助【点个赞】吧~~~ 阿酷TONY / 2023-5-12 / 原创文章 / 长沙 / 文章…

今天的CRM系统,还仅仅是一套营销工具吗?

如今&#xff0c;数字化浪潮正席卷全球&#xff0c;数字经济已经成为全球经济未来发展的新动能和新方向。据IDC的预测显示&#xff0c;全球对数字转型的投资将以每年17.1%的复合速度增长&#xff0c;2023年这类投资预计将达到2.3万亿美元。而CRM系统&#xff08;客户关系管理系…

用友NC软件被locked1勒索病毒攻击加密的方式,服务器oracle数据库中了勒索病毒

用友NC软件是一款企业级管理软件&#xff0c;广泛应用于各行各业的集团企业中。然而&#xff0c;最近有关locked1勒索病毒对用友NC软件的攻击已经引起了广泛的关注和担忧。下面将为大家介绍一下有关locked1攻击加密用友NC软件的方式&#xff0c;并给出合理的解决方案。 首先&a…

Kafka 之生产者与消费者基础知识:基本配置、拦截器、序列化、分区器

一、配置 1. 必须要配置的参数&#xff1a; kafaf集群地址列表&#xff1a;理论上写一个节点地址&#xff0c;就相当于绑定了整个kafka集群了&#xff0c;但是建议多写几个&#xff0c;如果只写一个&#xff0c;万一宕机就麻烦了kafka消息的key和value要指定序列化方法kafka对…

2023年湖北省建设厅特种作业操作证报名条件是什么?

建筑施工特种作业人员是指在房屋建筑和市政工程施工活动中&#xff0c;从事可能对本人、他人及周围设备设施的安全造成重大危害作业的人员。建筑施工特种作业人员必须经建设主管部门考核合格&#xff0c;取得建筑施工特种作业人员操作资格证书&#xff08;以下简称“资格证书”…

零代码基础,一分钟教你快速搭建微信 ChatGPT 机器人

零代码基础,一分钟教你快速搭建微信 ChatGPT 机器人 1.注册 Railway 账号:2.部署3. 配置1)点击 Configure2)选择仓库地址3)点击安装4)配置信息如下图:5)部署:deploy6)部署完成:7)微信扫码登录8) 根据需要修改配置:最后总结:效果预览:致谢开源项目:本教程收集于…

U盘分区合并的方法有哪些?

大多数用户在硬盘的使用中会进行分区操作&#xff0c;同时为了方便整理&#xff0c;部分用户也会选择给自己的U盘分区&#xff0c;可是在后续操作中发现U盘分区没有什么用处&#xff0c;因此就想要重新将其合并&#xff0c;但要把分区重新合并没那么容易&#xff0c;那么U盘被分…

笔试练习Day02

一.选择题&#xff1a; 1.A 派生出子类 B &#xff0c; B 派生出子类 C &#xff0c;并且在 java 源代码有如下声明&#xff1a; 1. A a0new A(); 2. A a1new B(); 3. A a2new C(); 问以下哪个说法是正确的&#xff08;&#xff09; A 只有第一行能通过编译 B 第1、2行能通过编…

mysql distinct 和 group by 去重

标题mysql distinct 和 group by 去重 一、先说结论&#xff1a; MySQL中常用去重复数据的方法是使用 distinct 或者 group by group by 分组后&#xff0c;如果没有对分组后的数据进行操作&#xff0c;如使用聚合函数/分组函数&#xff1a;count、sum、avg、max 、min&…

封装Python脚本:使用pymysql+sshtunnel,支持通过SSH隧道方式链接mysql数据库

一、前言 通常为了保证数据库安全&#xff0c;不会允许直接连接数据库&#xff0c;而是需要通过SSH隧道去连接服务器背后的数据库&#xff1b;通过Navicat操作如下&#xff1a; 二、python封装脚本 # -*- coding: utf-8 -*- # Time : 2023/5/12 11:04 # Author : chen…