当前位置: 首页 > news >正文

MySQL事务与存储引擎的学习(一)

一、MySQL事务

1.1、什么是MySQL事务?

是用户定义的,将多条命令打包,在服务端执行,要么全部执行,要么全部不执行。保证不会被其他命令加塞,打断。

MySQL当中的事务是自动执行的,默认情况下,每条SQL语句执行完成以后都会自动提交事务。

1.2、手动控制事务

    1. 查看/设置事务的提交方式
SELECT @@autocommit;    -- 查看事务的提交方式,1表示自动提交,0表示手动提交
SET @@autocommit = 0;   -- 设置事务的提交方式为手动提交
    1. 提交事务
-- 执行完事务后,如果要提交事务,使用COMMIT语句
COMMIT;
    1. 回滚事务
-- 如果执行完事务后,发现执行的事务有问题,想要撤销事务,使用ROLLBACK语句
ROLLBACK;

1.3、自动控制事务

    1. 开启事务
START TRANSACTION OR BEGIN;    -- 显式地开启一个事务
    1. 提交事务
COMMIT;
    1. 回滚事务
ROLLBACK;

1.4、事务的特性(ACID)

  • 原子性(Automicity):事务是最小的执行单位,不允许分割,要么全部成功,要么全部失败
  • 一致性(Consistency):事务完成时,所有数据都必须处于一致状态
  • 隔离性(Isolation):数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行
  • 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

1.5、并发事务处理可能遇到的问题

问题描述
脏读(Dirty Read)一个事务在处理过程中读取了另一个未提交的事务中的数据
不可重复读一个事务先后读取同一条记录,但两次读取的数据不同,称为不可重复读
幻读一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了“幻影”

1.6、事务的隔离级别(为了解决并发事务遇到的问题)

隔离级别脏读不可重复读幻读
读未提交(Read Uncommitted)可能发生可能发生可能发生
读已提交(Read Committed)不可能发生可能发生可能发生
可重复读(Repeatable Read–MySQL默认级别)不可能发生不可能发生可能发生
串行化(Serializable)不可能发生不可能发生不可能发生

注意:

  • 隔离级别从小到大,安全性越高,效率越低,串行化级别效率最低,但是安全性最高

1.7、查看/设置事务的隔离级别

SELECT @@transaction_isolation;    -- 查看事务的隔离级别SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL 隔离级别{READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SERIALIZABLE};

二、存储引擎

2.1、 体系结构

在这里插入图片描述

2.2、 存储引擎简介

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

CREATE TABLE 表名(字段1 数据类型 [约束],...
) ENGINE=存储引擎名称;    -- MySQL5.5以后的版本,默认存储引擎为InnoDB

2.3、查看当前数据库支持的存储引擎

SHOW ENGINES;

2.4、 存储引擎-InnoDB

  • 介绍:InnoDB是一种兼顾高可靠性高性能的通用存储引擎,在MySQL5.5以后版本中是默认的存储引擎。
  • 特点:
      1. DML操作遵循ACID模型,支持事务安全(具有事务,回滚,并发控制)
      1. 行级锁,提高并发访问性能
      1. 支持外键,保证数据的完整性和正确性
    • 文件:xxx.ibd,InnoDB引擎的每张表都会对应一个表空间文件,存储该表的表结构(frm、sdi)、数据和索引,参数:innodb_file_per_table
    -- 查看参数是否开启
    SHOW VARIABLES LIKE 'innodb_file_per_table';
    
    # 查看idb文件
    idb2sdi xxx.ibd
    
  • 逻辑存储结构
    在这里插入图片描述

2.5、存储引擎-MyISAM

  • 介绍:MyISAM是MySQL早期的默认存储引擎
  • 特点:
      1. 不支持事务,不支持外键
      1. 支持表锁,不支持行锁
      1. 访问速度快
    • 文件:
      • xxx.sdi:存储表结构信息
      • xxx.MYD:存储数据
      • xxx.MYI:存储索引

2.6、存储引擎-Memory

  • 介绍:Memory引擎的表数据是存储在内存中的,因此速度快,但是不安全,一旦MySQL服务关闭,所有的数据都会丢失
  • 特点:
      1. 存储内容全部放在内存中,速度快
      1. hash索引(默认)
    • 文件:
      • xxx.sdi:存储表结构信息

2.7、存储引擎的选择(常用还是InnoDB)

  • InnoDB:是MySQL的默认引擎,支持事务、外键,如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操作,那么InnoDB是最好的选择。
  • MyISAM: 如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不高,那么选择MyISAM是非常合适的。NoSQL数据库替代
  • MEMORY: 将所有数据保存在内存中,速度快,通常用于临时表及缓存、MEMORY的缺陷就是对于表的大小有限制,太大的表无法缓存在内存中,而且如果mysqld服务关闭了,那么所有的数据都会丢失。Redis替代

三、总结:

3.1、MySQL的事务与Redis的事务比较

MySQLRedis
事务支持支持(默认开启)支持(需手动控制)
回滚事务支持不支持
ACID支持支持

3.2、MySQL的存储引擎比较

在这里插入图片描述

http://www.dtcms.com/a/313201.html

相关文章:

  • Docker国内镜像列表
  • Effective C++ 条款19: 设计class犹如设计type
  • Python从入门到精通计划Day02: Python语法探秘:当现代艺术遇到古典音乐
  • 最小半径覆盖问题【C++解法+二分+扫描线】
  • 【CF】Day118——杂题 (随机哈希 / 思维 | 贪心 / DP | 位运算构造 | 状态压缩 + 建图 + 最短路 | 构造 | 贪心)
  • 使用纯Docker命令搭建多服务环境(Linux版)
  • Python篇---包
  • 在Ansys Mechanical中对磨损进行建模
  • 力扣经典算法篇-40-螺旋矩阵(方向遍历:方向数组+已访问元素集合)
  • 【ROS2】常用命令
  • 04.Redis 的多实例
  • 双八无碳小车设计【16张cad】三维图+设计说明书
  • 【C++ 初级工程师面试--5】inline内联函数特点 、和普通函数的区别、什么时候适合内联?
  • json-server 快速搭建本地 Mock 数据服务
  • Day23--回溯--39. 组合总和,40. 组合总和 II,131. 分割回文串
  • Android 之 MVC架构
  • 线段树学习笔记 - 摩尔投票问题
  • I2C基础
  • mybatis-plus从入门到入土(四):持久层接口之BaseMapper和选装件
  • PHP现代化全栈开发:前后端分离与API架构实践
  • uni-app学习笔记01-项目初始化及相关文件
  • Go语言常量
  • 11.消息队列
  • 计算机视觉CS231n学习(2)
  • 从马武寨穿越关山
  • ICCV 2025 | EPD-Solver:西湖大学发布并行加速扩散采样算法
  • p5.js 用 beginGeometry () 和 endGeometry () 打造自定义 3D 模型
  • 控制建模matlab练习06:比例积分控制-②PI控制器
  • 达梦数据库联机备份和脱机备份的区别
  • Centos7 安装Python3.11