MySQL学习5:事务、存储引擎

news2024/11/29 0:53:30

事务

简介

事务是一组数据库操作的执行单元,它要么完全执行,要么完全不执行。事务是确保数据库中的数据一致性和完整性的重要机制之一。

事务具有以下四个特性(称为ACID特性):

  1. 原子性(Atomicity):事务作为一个整体被执行,要么全部操作成功,要么全部操作失败。如果事务中的任何操作失败,那么整个事务将被回滚到初始状态。

  2. 一致性(Consistency):事务的执行不会破坏数据库的完整性约束。在事务开始之前和结束之后,数据库必须保持一致状态。

  3. 隔离性(Isolation):事务的执行是相互隔离的,即一个事务的操作不会被其他并发事务所干扰。每个事务都应该感知不到其他并发事务的存在。

  4. 持久性(Durability):一旦事务提交,其结果应该永久保存在数据库中,即使在系统故障或重启后也不能丢失。

通过使用事务,可以确保数据库操作的安全性和一致性,从而提供可靠的数据处理机制。在MySQL中,可以使用事务来对一系列SQL语句进行分组和控制。

语法

默认MySQL的事务是自动提交的,也就是当执行一条DML语句后,MySQL会立即隐式的提交事务。
因此我们使用事务时需要手动开启事务、提交事务,当出现异常后,回滚事务。

示例:比如张三给李四转账。转账成功时张三的钱会减少,李四的钱会增多;转账失败,双方的钱都不能发生变化。
也就是上面说的要么完全执行,要么完全不执行。不能够出现张三钱减少了,但是李四的钱没有增多的情况。

语法

-- 开启事务
begin
	
-- 如果执行成功则: 提交事务  commit;
-- 如果执行失败则: 回滚事务  rollback;
		
-- 结束事务
end

可以在业务代码里使用try-catch 来判断有没有执行成功。

并发事务问题

  • 脏读:当一个事务读取了另一个事务尚未提交的数据,然后该事务回滚,导致读取的数据是无效或错误的。
  • 不可重复读:一个事务在读取一个数据项之后,另一个事务修改了该数据项并提交,导致第一个事务再次读取时得到不同的结果。
  • 幻读:一个事务在读取了一批数据后,另一个事务插入了新的数据项并提交,导致第一个事务再次查询时发现多了一些之前不存在的数据。
  • 丢失更新:两个事务同时更新同一行数据,其中一个事务的更新结果被另一个事务覆盖,导致更新的结果丢失。

事务隔离

为了解决这些并发事务问题,MySQL提供了多种隔离级别,包括读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。不同的隔离级别可以根据具体的应用场景选择,以平衡并发性能和数据一致性的需求。

其中在MySQL中 ,可重复读是默认隔离
在这里插入图片描述
查看事务隔离级别

select @;

在这里插入图片描述
设置事务隔离级别

// 读未提交(Read Uncommitted):
   SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

// 读已提交(Read Committed):
   SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

// 可重复读(Repeatable Read):
   SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;

//串行化(Serializable):
   SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;

这些命令可以在事务开始前执行,以设置事务的隔离级别。请注意,设置事务隔离级别的命令只对当前会话有效,不会影响其他会话的隔离级别。另外,MySQL也支持在创建表或启动服务器时通过配置文件来设置默认的隔离级别。

存储引擎

存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可以被称为表类型。

查看当前表的存储引擎
我们可以通过show create table 表名来查看表使用的存储引擎

在这里插入图片描述
查看所有的存储引擎

show engines;

在这里插入图片描述

InnoDB

简介
InnoDB 是一种兼顾高可靠性和高性能的通用存储引擎,在MySQL 5.5之后,InnoDB 是默认的MySQL存储引擎。

特点:

  • DML操作遵循ACID模型,支持事务
  • 行级锁,提高并发访问性能
  • 支持外键约束,保证数据的完整性和正确性

文件
xxx.idb:xxx代表的是表名,innerDB引擎的每张表都会对应这样的一个表空间文件,存储该表的表结构、数据和索引

在这里插入图片描述

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

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

相关文章

Discourse 能支持多少数量的主题

支持主题的数量和 ID 使用的数据类型有关。 根据我们从 Discourse 上 dump 出来的 SQL,我们看到 Discourse 的官方使用 Integer 作为 ID 的数据类型。 随后,我们查看了 pgsql 的官方文档,integer 是 4 字节的,能够存储的最大值为…

智能合约安全分析,假充值攻击如何突破交易所的防御?

智能合约安全分析,假充值攻击如何突破交易所的防御? 引言 假充值攻击,是指攻击者通过利用交易所在处理充值过程中的漏洞或系统错误,发送伪造的交易信息到交易所钱包地址,这些伪造的交易信息被交易所误认为是真实的充值…

系统架构设计师(第二版)学习笔记----计算机网络

【原文链接】系统架构设计师(第二版)学习笔记----计算机网络 文章目录 一、计算机网络的基本概念1.1 计算机网络的发展阶段1.2 计算机网络的功能1.3 计算机网络的性能指标1.4 计算机网络的非性能指标 二、通信技术2.1 发信机的信号处理流程2.2 收信机的信…

运维经验记录 在CentOS上挂载Windows共享磁盘

1、需求: 非root用户(普通用户)能够读写windows共享目录,比如查看文件、创建文件、修改文件、删除文件 # 让普通用户也可以正常读写 uidvalue and gidvalue Set the owner and group of the root of the file system (default: …

再谈内存分配器的优缺点

结论 在频繁申请、释放内存的工作场景,建议需要考虑定制化的内存分配器Allocator 优点 那么用内存分配器有那些好处呢?在近段研究和积累看来,主要有以下几点: 拥有连续内存的访问优势较浅的申请、释放栈访问深度;甚…

攻防世界-WEB-upload1

打开靶机上传文件 必须上传图片,F12审计一下代码 发现校验代码 一句话木马,使用菜刀连接 通过bp修改文件类型 get成功,证明文件已经上传 修改POST请求 得到上传成功的文件,请求文件名 得到flag cyberpeace{5a97279c34e62…

The timestamp difference between admin and executor exceeds the limit.解决办法

前言: 使用xxjob报错了,图文如下: 2023-09-09 10:28:54 [com.xxl.job.core.thread.JobThread#run]-[127]-[Thread-191] ----------- xxl-job job execute start ----------- ----------- Param: 2023-09-09 10:28:54 [com.xxl.job.core.thre…

企业架构LNMP学习笔记27

Keepalived的配置补充: 脑裂(裂脑):vip出现在了多台机器上。网络不通畅,禁用了数据包,主备服务器没法通讯,造成备服务器认为主服务器不可用,绑定VIP,主服务器VIP不会释放…

安卓如何设置开机启动某个程序?init.rc给你搞定

一、如何设置开机启动某个程序? 1.需求描述 最近有个项目需要在Android开机启动之后,自动执行一个C语言编写的程序:pengd 该程序运行时需要修改网络ip地址及其他网络操作,所以需要root权限 根据需求描述,我们需要做…

算法-88.合并两个有序数组-简单

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组…

【Idea】IntelliJ IDEA 2023版本,.java文件报 no scalac found to compile scala sources问题

maven install没问题,新版本idea中编译则报错。 原因应该是新旧版本对Scala Compiler的调用逻辑有差异。造成的,因为同样的工程,在旧版本里可以正常编译。 解决方法 Settings > Build, Execution, Deployment > Compiler > Scala…

【区块链】DeFi是什么?大白话科普文

对于一些没有玩过区块链、或者说没有真金白银的体验过这个虚拟世界的小伙伴来说,这篇文章可以帮你了解 DeFi。致力于帮你在这个线上走出这一步。 当然这不是理财建议。 文章目录 前言什么是去中心化金融?有哪些 DeFi 项目DeFi由哪几部分构成?热门DeFi项目有哪些?前言 Def…

【C++】封装map和set(红黑树实现)

前言: 前面,我们学习了set和map的用法,这两个容器可以完成查找,排序等操作,后来我们在学习过二叉搜索树的基础上又学习了两种特殊的二叉搜索树——AVL树和红黑树,他们俩可以是效率进一步提高,其…

stm32f103rct6系统结构框图

一、其中,APB1总线和APB2总线的区别有: 1、时钟频率: APB1是低速总线(一般为36M),这意味着APB1总线上的外设运行在较低的时钟速度下,适合处理一些低速外设,如USART、I2C等。 APB2…

工作新时代,腾讯轻联塑造高效办公未来

腾讯轻联:开启便捷、高效的集成新纪元 ⭐ 写在前面⭐ 使用模板快速起步⭐ 自定义流程初体验⭐ 无与伦比的集成强者⭐ 写在最后 ⭐ 写在前面 在当今竞争激烈的商业环境中,提高企业的办公效率和工作流程自动化变得至关重要。腾讯轻联,作为新一…

对于pytorch和对应pytorch网站的探索

一、关于网站上面的那个教程: 适合PyTorch小白的官网教程:Learning PyTorch With Examples - 知乎 (zhihu.com) 这个链接也是一样的, 总的来说,里面讲了这么一件事: 如果没有pytorch的分装好的nn.module用来继承的话,需要设计…

营销邮件主题怎么写?编写邮件主题的技巧?

如何创建营销邮件主题?制作EDM邮件主题的方法策略? 营销邮件主题在整个营销邮件中起着至关重要的作用,它是吸引读者打开邮件的第一步。蜂邮EDM将分享一些关于如何撰写令人惊艳的营销邮件主题的技巧,帮助您吸引更多的目标受众。 …

OpenCV 08(图像滤波器 算子)

一、 索贝尔(sobel)算子 边缘是像素值发生跃迁的位置,是图像的显著特征之一,在图像特征提取,对象检测,模式识别等方面都有重要的作用。 人眼如何识别图像边缘? 比如有一幅图,图里面有一条线,左边很亮,右边很暗,那人眼就很容易…

【Spring面试】Spring事务(图文详解)

概念 一个事务包含两个及两个以上的步骤 Spring是没法提供事务的,Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。真正的数据库层的事务提交和回滚是通过binlog或者redo log实现的。 事务…

Vuex仓库的创建

vuex 的使用 - 创建仓库 文章目录 vuex 的使用 - 创建仓库1.安装 vuex2.新建 store/index.js 专门存放 vuex3.创建仓库 store/index.js4 在 main.js 中导入挂载到 Vue 实例上5.测试打印Vuex 1.安装 vuex 安装vuex与vue-router类似,vuex是一个独立存在的插件&#x…