IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL的存储引擎、事务和锁机制 -> 正文阅读

[大数据]MySQL的存储引擎、事务和锁机制

1.什么存储引擎

数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧,锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。(存储引擎说白了,就像模板,每个模板有自己的主要功能,数据库管理系统在此模板上建立MySQL5.5之后的默认是InnoDB

2.什么事务

  • 在MySQL中的事务是由存储引擎实现的,在MySQL,只有InnoDB存储引擎才支持事务。
  • 事务处理可以维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行。
  • 事务用来管理DDL、DML、DCL操作,比如insert,update,delete语句,默认是自动提交的。
    在这里插入图片描述
    在这里插入图片描述

2.1 MySQL事务的基本操作

在这里插入图片描述
Mysql事务是自己执行的,执行一条语句就开启一次关闭一次
在这里插入图片描述
案列

create database if not exists mydb02_transcation;
use mydb02_transcation;
-- 创建账户表
create table account(
 id int primary key,
 name varchar(20),
 money double
 );
 
 -- 插入数据
 insert into account values(1,'zhangsan',1000);
 insert into account values(2,'lisi',1000);
 
 -- 设置MySQL的事务为手动提交(关闭自动提交)
 set autocommit = 0;
 -- 模拟账户转账
 -- 开始事务
 begin;
 update account set money = money - 200 where name ='zhangsan';
 update account set money = money + 200 where name = 'lisi';
 
 -- 提交事务
 commit; -- 执行完这个语句,才会查询出来
 
 -- 回滚事务
 rollback; -- 如果执行代码中有错误,将之前执行语句回滚回去,数据变回原样

2.2 MySQL事务的特性

原子性、一致性、隔离性、持久性
在这里插入图片描述

2.3 MySQL事务的隔离级别

顾名思义就是将事务与另一个事务隔离开,为什么要隔离呢?
答: 如当一个事务正在操作的数据被另一个事务修改或删除了,最后的执行效果可能无法达到预期?

在这里插入图片描述
四种会出现的级别
在这里插入图片描述
在这里插入图片描述

脏读:就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。
例如:(事务A修改未提交,事务B查看,随后A回归,B提交再查看,数据不一样)
张三的工资为5000,事务A中把他的工资改为8000,但事务A尚未提交。

与此同时,事务B正在读取张三的工资,读取到张三的工资为8000。

随后,事务A发生异常,而回滚了事务。张三的工资又回滚为5000。

最后,事务B读取到的张三工资为8000的数据即为脏数据,事务B做了一次脏读

不可重复读
是指在A事务内,多次读同一数据。在A事务还没有结束时,另外一个B事务也访问该同一数据。那么,在A事务中的两次读数据之间,由于B事务的修改,那么A事务两次读到的的数据可能是不一样的。这样就发生了A事务内两次读到的数据是不一样的,因此称为是不可重复读。
例如:(查询 修改 查询)
在事务A中,读取到张三的工资为5000,操作没有完成,事务还没提交。

与此同时,事务B把张三的工资改为8000,并提交了事务。

随后,在事务A中,再次读取张三的工资,此时工资变为8000。在一个事务中前后两次读取的结果并不致,导致了不可重复读。
幻读
是指当事务不是独立执行时发生的一种现象,例如A事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,B事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作B事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。

例如:(一个修改,一个插入)
目前工资为5000的员工有10人,事务A读取所有工资为5000的人数为10人。
此时,
事务B插入一条工资也为5000的记录。
这时,事务A再次读取工资为5000的员工,记录为11人。此时产生了幻读。

操作:
在这里插入图片描述

3. 什么是MySQL的锁机制

锁是计算机协调多个进程或线程并发访问某一个资源的机制(避免争抢);

从对数据操作的粒度分
1)表锁:操作时,会锁定整个表
1)行锁:操作时,会锁定当前操作行
从对数据操作的类型分
1)读锁:针对同一份数据,多个读操作可以同时进行,而不会互相影响。
2)写锁:当前操作没有完成之前,它会阻断其他写锁和读锁。

在这里插入图片描述

3.1 MyISAM表锁

MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作(UPDATE、DELETE、INSERT等)前,会自动给涉及的表加写锁,这个过程并不需要用户干预,因此,用户一般不需要直接用LOCK TABLE命令给MylSAM表显式加锁。
在这里插入图片描述

3.2 InnoDB行锁

InnoDB与MyISAM的最大不同有两点:一是支持事务;二是采用了行锁;

在这里插入图片描述
操作:
在这里插入图片描述

参考

https://blog.csdn.net/weixin_33724264/article/details/113442844
https://www.bilibili.com/video/BV1iF411z7Pu?p=159&spm_id_from=pageDriver

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-12 17:36:19  更:2022-03-12 17:39:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:36:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码