【MySQL】触发器与存储引擎

目录

  • 触发器
    • 基本概念
    • 触发器操作
      • 创建触发器
      • NEW 与 OLD
      • 查看触发器
      • 删除触发器
    • 注意事项
  • 存储引擎
    • 基本概念
    • 基本操作
      • 查询当前数据库支持的存储引擎
      • 查看当前的默认存储引擎
      • 查看某个表用的存储引擎
      • 创建表时指定存储引擎
      • 修改表的存储引擎

触发器

基本概念

概述:

  • 触发器,就是一种特殊的存储过程。触发器和存储过程一样是一个能够完成特定功能、存储在数据库服务器上的 SQL 片段,但是触发器无需调用,当对数据库表中的数据执行 DML 操作时自动触发这个 SQL 片段的执行,无需手动条用
  • 在 MySQL 中,只有执行 insert,delete,update 操作时才能触发触发器的执行
  • 触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作
  • 使用别名 OLD 和 NEW 来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发,不支持语句级触发

触发器特点:

  • 什么条件会触发?insert、delete、update
  • 什么时候触发?在增删改前或者后
  • 触发频率:针对每一行执行
  • 触发器定义在表上,附着在表上

触发器操作

创建触发器

创建单执行语句的触发器

格式如下:

create trigger 触发器名 before|after 触发事件
on 表名 for each row
执行语句;

创建多执行语句的触发器

格式如下:

create trigger 触发器名 before|after 触发事件
on 表名 for each row
begin执行语句列表
end;

代码示例:

-- 用户表
create table user(uid int primary key ,username varchar(50) not null ,password varchar(50) not null
);-- 用户信息操作日志
create table user_logs(id int primary key auto_increment ,time timestamp ,log_text varchar(255)
);-- 定义触发器
create trigger trigger1 after inserton user for each rowinsert into user_logs values (null,now(),'有新用户添加');-- 在user表中添加数据
insert into user values (1,'张三','123456');

结果如下:

在这里插入图片描述

NEW 与 OLD

MySQL 中定义了 NEW 和 OLD,用来表示触发器的所在表中,触发了触发器的那一行数据,来引用触发器中发生变化的记录内容

触发器类型触发器类型 NEW 和 OLD 的使用
INSERT 型触发器NEW 表示将要或者已经新增的数据
UPDATE 型触发器OLD 表示修改之前的数据,NEW 表示将要或已经修改后的数据
DELETE 型触发器OLD 表示将要或者已经删除的数据

使用方法:NEW.columnName(columnName 为相应数据表某一字段名)

代码示例:

-- 用户表
create table user(uid int primary key ,username varchar(50) not null ,password varchar(50) not null
);-- 用户信息操作日志
create table user_logs(id int primary key auto_increment ,time timestamp ,log_text varchar(255)
);-- 定义insert触发器
create trigger trigger2 after inserton user for each rowinsert into user_logs values(null,now(),concat('有新用户添加,信息为:',new.uid,new.username,new.password));-- 在user表中添加数据
insert into user values (1,'张三','123456'),(2,'李四','123456'),(3,'王五','123456'),(4,'赵六','123456');-- 定义update触发器
create trigger trigger3 after updateon user for each rowinsert into user_logs values(null,now(),concat('有用户修改,修改前的信息为:',old.uid,old.username,old.password));
create trigger trigger4 after updateon user for each rowinsert into user_logs values(null,now(),concat('有用户修改,修改后的信息为:',new.uid,new.username,new.password));-- 修改user表中的数据
update user set password='234567' where uid=2;-- 定义delete触发器
create trigger trigger5 after deleteon user for each rowinsert into user_logs values(null,now(),concat('有用户删除,删除前的信息为:',old.uid,old.username,old.password));-- 删除user表中的数据
delete from user where uid=3;

结果如下:

在这里插入图片描述

查看触发器

格式如下:

show triggers;

代码示例:

show triggers;

结果如下:

在这里插入图片描述

删除触发器

格式如下:

drop trigger [if exists] trigger_name;

代码示例:

drop trigger if exists trigger2;
show triggers;

结果如下:

在这里插入图片描述

注意事项

MySQL 中触发器不能对本表进行 insert、update、delete 操作,以免递归循环触发

尽量少使用触发器,假设触发器触发每次执行 1s,添加 500 条数据就要触发 500 次触发器,就会导致效率变低

触发器是针对每一行的,对增删改非常频繁的表上不要使用触发器,会非常消耗资源

存储引擎

基本概念

概述:

  • 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据
  • 不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySQL 的核心就是存储引擎
  • 用户可以根据不同的需求为数据表选择不同的存储引擎
  • 可以使用 SHOW ENGINES 命令可以查看 MySQL 的所有执行引擎,我们可以到默认的执行引擎是 InnoDB,支持事务,行级锁定和外键

分类:

  • MyISAM:MySQL 5.5 之前的默认数据库引擎,最为常用。拥有较高的插入,查询速度,但不支持事务
  • InnoDB:事务型场景的首选引擎,支持 ACID 事务,支持行级锁定,MySQL 5.5 成为默认数据库引擎
  • Memory:所有数据置于内存的存储引擎,拥有极高的插入、更新和查询效率,但会占用与数据量成正比的内存空间,且内容在 MySQL 重新启动时会丢失
  • Archive:非常适合存储大量独立的历史记录数据(因不经常被读取),拥有高效的插入速度,但对查询的支持相对较差
  • Federated:将不同的 MySQL 服务器联合起来,逻辑上组成一个完整的数据库,非常适合分布式应用
  • CSV:逻辑上由逗号分割数据的存储引擎。它会在数据库子目录里为每个数据表创建一个 .csv 文件。这是一种普通文本文件,每个数据行占用一个文本行。CSV 存储引擎不支持索引。
  • BlackHole:黑洞引擎,写入的任何数据都会消失,一般用于记录 binlog 做复制的中继。
  • ERFORMANCE_SCHEMA:存储引擎,该引擎主要用于收集数据库服务器性能参数。
  • Mrg_Myisam Merge:存储引擎,是一组 MyIsam 的组合,即将 MyIsam 引擎的多个表聚合起来,其内部没有数据,真正的数据仍在 MyIsam 引擎的表中,但可直接进行查询、删除、更新等操作。

常用引擎对比:

功能MyISAMMEMORYInnoDB
存储限制256TBRAM64TB
支持事务NoNoYes
支持全文索引YesNoNo
支持 B 树索引YesYesYes
支持哈希索引NoYesNo
支持集群索引NoNoYes
支持数据索引YesYesYes
支持数据压缩YesNoNo
空间使用率N/A
支持外键NoNoYes

基本操作

查询当前数据库支持的存储引擎

代码示例:

show engines;

结果如下:

在这里插入图片描述

查看当前的默认存储引擎

代码示例:

show variables like '%storage_engine%';

结果如下:

在这里插入图片描述

查看某个表用的存储引擎

格式如下:

show create table table_name;

代码示例:

create table student(id int ,name varchar(20)
);
show create table student;

结果如下:

在这里插入图片描述

创建表时指定存储引擎

格式如下:

create table table_name(...) engine = engine_name;

代码示例:

create table teacher(id int ,name varchar(20)
) engine = MyISAM;
show create table teacher;

结果如下:

在这里插入图片描述

修改表的存储引擎

格式如下:

alter table table_name engine = engine_name;

代码示例:

alter table teacher engine = InnoDB;
show create table teacher;

结果如下:

在这里插入图片描述

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

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

相关文章

能“嘎嘎提升”提升用户居住体验的智能家居物联网框架推荐!

智能家居在日常生活中给我们的带来了更多的便利,更让有些用户切实地体会到了科技的魅力,对于想要打造属于自己的智能家居氛围感的用户们,以下是一些能够帮助提升居住体验的智能家居物联网框架及应用: 1. 涂鸦智能(Tuy…

DevEco Studio的使用

目录 1.创建ArkTS工程 2.ArkTS工程目录结构(Stage模型) 构建第一个页面 构建第二个页面 实现页面间的跳转 1.创建ArkTS工程 若首次打开DevEco Studio,请点击Create Project创建工程。如果已经打开了一个工程,请在菜单栏选择…

性能监控——vmstat

性能监控——vmstat ​ 性能监控是对 IT 系统运行效率和有效性的系统观察和测量。它涉及收集、分析和报告各种组件(包括应用程序、网络、服务器和数据库)的关键性能指标 (KPI)。此过程使用专门的工具来跟踪响应时间、吞吐量、资源利用率和错误率等指标。…

搭建Python量化开发环境:从零开始的完整指南

搭建Python量化开发环境:从零开始的完整指南 在量化投资领域,一个稳定且高效的开发环境是成功的关键。本文将引导你一步步搭建起自己的Python量化开发环境,确保你能够顺利开始编写和运行量化策略。 🚀量化软件开通 &#x1f68…

图像分割的mask有空洞怎么修补

分享一个对实例分割mask修补的方法,希望对大家有所帮助。 1. 这是我准备分割的图片 2 分割结果 可以看到衣服部分有一些没分割出来,二值化图片能清晰看到衣服部分有些黑色未分出的地方。 3 补全mask区域 import cv2 import numpy as npdef fill_mask_h…

Qt 控件概述 QLabel

目录 QLabel显示类控件 label如何做到与窗口同步变化 边框 Frame QLabel显示类控件 ​​ ​​ textFormat :设置文件格式 ​ Pixmap :标签图片 label如何做到与窗口同步变化 Qt中对应用户的操作 : 事件和信号 拖拽窗口大小就会触发…

词频统计 ccf-csp 2024-2-1

在学习了文本处理后,小 P 对英语书中的 n篇文章进行了初步整理。 具体来说,小 P将所有的英文单词都转化为了整数编号。 假设这 n 篇文章中共出现了 m个不同的单词,则把它们从 1到 m进行编号。 这样,每篇文章就简化为了一个整数…

用爬虫解锁 Shopee 店铺商品数据,开启电商新洞察

在电商竞争白热化的当下,Shopee 作为全球知名的电商平台,汇聚了海量的商品与商机。对于电商从业者、数据分析师、创业者来说,精准掌握 Shopee 店铺的商品信息,就如同手握一把开启财富大门的钥匙。而爬虫技术,无疑是帮助…

k8s中的service解析

k8s中的service解析 在k8s中,我们可以通过pod来创建服务。 然而,当我们创建多个 Pod 来提供同一项服务时,直接通过 Pod IP 进行访问会变得复杂且不可维护。因此,Kubernetes 提供了 Service 这一抽象概念,用于对外暴露…

git 命令回退版本

1、查看提交记录 git log --oneline # 简化的提交历史&#xff08;推荐&#xff09; # 或 git log # 完整提交历史2、版本回退 git reset --hard <commit-hash>3、如果已推送过代码到远程仓库&#xff0c;需强制推送更新 git push -f

深度学习与传统算法在人脸识别领域的演进:从Eigenfaces到ArcFace

一、传统人脸识别方法的发展与局限 1.1 Eigenfaces&#xff1a;主成分分析的经典实践 算法原理 Eigenfaces是基于主成分分析&#xff08;PCA&#xff09;的里程碑式方法。其核心思想是将人脸图像视为高维向量&#xff0c;通过协方差矩阵计算特征向量&#xff08;即特征脸&…

串口接收不到数据,串口RX配置(f407),f103和f407的区别

问题 芯片&#xff1a;STM32F407&#xff0c;软件&#xff1a;标准库 使用串口时&#xff0c;直接把之前STM32F103的串口配置移植过来&#xff0c;同样以串口4为例&#xff0c;代码如下&#xff1a; STM32F103 UART4&#xff1a; void UART4_Configuration(uint32_t BaudRa…

浅分析 PE3R 感知高效的三维重建

"近期&#xff0c;二维到三维感知技术的进步显著提升了对二维图像中三维场景的理解能力。然而&#xff0c;现有方法面临诸多关键挑战&#xff0c;包括跨场景泛化能力有限、感知精度欠佳以及重建速度缓慢。为克服这些局限&#xff0c;我们提出了感知高效三维重建框架&#…

存算一体与存算分离:架构设计的深度解析与实现方案

随着数据量的不断增大和对计算能力的需求日益提高&#xff0c;存算一体作为一种新型架构设计理念&#xff0c;在大数据处理、云计算和人工智能等领域正逐步引起广泛关注。在深入探讨存算一体之前&#xff0c;我们需要先了解存储和计算的基本概念&#xff0c;以及存算分离和存算…

汇编与反汇编:DEBUG 命令使用指南

前言 汇编语言是计算机底层编程语言&#xff0c;直接与 CPU 指令集对应。掌握汇编语言和调试工具&#xff08;如DEBUG&#xff09;是深入理解计算机工作原理的关键。本文将介绍汇编与反汇编的基本概念&#xff0c;并详细讲解如何使用 DEBUG 命令进行调试和内存操作。 目录 一、…

数据分析的12个挑战及其解决方法

俗话说得好“说起来容易做起来难。”数据分析对于风险管理者是极为重要的。我们可以利用数据分析结论&#xff0c;来为企业决策做有效协助&#xff0c;帮助企业改善财务状况&#xff0c;提升企业业务销售水平&#xff0c;帮助员工预测可能发生的问题&#xff0c;并协助监控企业…

栈/堆/static/虚表

在 C 里&#xff0c;栈空间主要用来存放局部变量、函数调用信息等。下面为你介绍栈空间在 C 里的运用方式。 1. 局部变量的使用 在函数内部定义的变量会被存于栈空间&#xff0c;当函数执行结束&#xff0c;这些变量会自动被销毁。 #include <iostream>void exampleFu…

Vue keepalive学习用法

在Vue中&#xff0c;<keep-alive>的include属性用于指定需要缓存的组件&#xff0c;其实现方式如下&#xff1a; 1. 基本用法 • 字符串形式&#xff1a;通过逗号分隔组件名称&#xff0c;匹配到的组件会被缓存。 <keep-alive include"ComponentA,ComponentB&…

搭建个人博客教程(Hexo)

如何快速搭建一套本地的博客系统呢&#xff1f;这里有一套gitNode.jsHexo的部署方案来进行解决。 安装git Git 是一款免费开源的分布式版本控制系统&#xff0c;由 Linus Torvalds 于 2005 年为 Linux 内核开发设计。它通过本地仓库和远程仓库实现代码管理&#xff0c;支持分支…

手撕算法之`vector` 扩容、`string` 分割、链表翻转

手写常见操作:vector 扩容、string 分割、链表翻转 (一)vector扩容 在 C++ 中,vector 的扩容机制是动态数组实现的核心特性,直接关系到性能和内存使用效率。以下是深入剖析: 1. 扩容触发条件 vector<int> v; v.push_back(1); // 当 size() == capacity() 时触发…