MySQL数据库MySQL事务与存储引擎

目录

一、MySQL事务

(一)定义

(二)ACID特性

1.原子性

2.一致性

3.隔离性

4.持久性

(三)隔离级别

1.可能出现的一致性问题

(1)脏读

(2)不可重复读

(3)幻读

(4)丢失更新

2.隔离级别

(1)未提交读

(2)提交读

(3)可重复读

(4)串行读

3.设置隔离级别

(1)全局级

​编辑

(2)会话级

​编辑

4.查看隔离级别

(1)全局级

​编辑

(2)会话级

​编辑

(四)事务管理操作

1.开启、操作事务

2.事务回滚

​编辑

3.结束事务

(1)提交事务

(2)回滚事务

4.自动提交事务

​编辑

二、MySQL存储引擎

(一)定义

(二)常用的存储引擎

1.MyISAM

2.InnoDB

(三)查看存储引擎

​编辑

​编辑

(四)修改存储引擎

1.针对已存在的表修改存储引擎

​编辑

2.新建表时指定存储引擎

​编辑

3.设置新建表的默认存储引擎

​编辑

(五)死锁

1.现象

2.避免死锁


一、MySQL事务

(一)定义

       事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。

(二)ACID特性

       ACID,是指在可靠数据库管理系统(DBMS)中,事务(transaction)应该具有的四个特性:

1.原子性

      事务管理的基础。事务中所有操作看做一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生。

2.一致性

      事务管理的目的。保证事务开始之前和事务结束以后,数据库的完整和一致。

3.隔离性

      事务管理的手段。使多个事务并发操作同一个表数据时,每个事务都有各自独立的数据空间,事务的执行不受其他事务的干扰。可通过设置隔离级别解决不同的一致性问题。

4.持久性

      事务管理的结果。事务管理的结果。当事务被提交以后,事务中的命令操作修改的结果会被持久保存,且不会被回滚。

(三)隔离级别

1.可能出现的一致性问题

    当多个客户端并发地访问同一个表时,可能出现下面的一致性问题:

(1)脏读

     当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。

(2)不可重复读

       指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。(即不能读到相同的数据内容)

(3)幻读

       一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,另一个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,操作前一个事务的用户会发现表中还有一个没有修改的数据行,就好象发生了幻觉一样。

(4)丢失更新

      两个事务同时读取同一条记录,A先修改记录,B也修改记录(B不知道A修改过),B提交数据后B的修改结果覆盖了A的修改结果。

2.隔离级别

   MySQL事务支持如下四种隔离,用以控制事务所做的修改,并将修改通告至其它并发的事务

(1)未提交读

     read uncommitted   允许 脏读 不可重复读  幻读

(2)提交读

     read committed     不允许 脏读,允许 不可重复读  幻读

(3)可重复读

     repeatable read    不允许 脏读 不可重复读,有条件的允许 幻读(InnoDB存储引擎可以不允许)

(4)串行读

     Serializable       都不允许,相当于表级锁定,但是会影响数据库的读写效率和性能

3.设置隔离级别

(1)全局级

    对所有的会话有效,需要重新登录才可生效。

set global transaction isolation level 隔离级别;

(2)会话级

    只对当前的会话有效,在当前会话中立即生效。

set session transaction isolation level 隔离级别;

4.查看隔离级别

(1)全局级
show global variables like '%isolation%';
(2)会话级
show session variables like '%isolation%';

(四)事务管理操作

1.开启、操作事务

begin;             
#开启一个事务create database/table insert into update XXX set   delete from     
#事务性操作

2.事务回滚

savepoint XX;      
#在事务中创建回滚点
rollback to XX;    
#在事务中回滚操作到指定的回滚点位置

3.结束事务

(1)提交事务

     保存事务中命令操作的结果后,结束事务。

(2)回滚事务

     不保存事务中命令操作的结果,结束事务后,事务还原到开启前的数据和状态。

commit; 
#提交结束事务
rollback;   
#回滚结束事务

4.自动提交事务

        如果开起了自动提交,mysql会把每个sql语句当成一个事务,然后自动的提交commit;

        如果没有开启自动提交,当前会话连接的mysql的所有操作都会当成一个事务直到你输入rollback|commit;当前事务才算结束。当前事务结束前新的mysql连接时无法读取到任何当前会话的操作结果。

set autocommit=0;				
#禁止自动提交
set autocommit=1;				
#开启自动提交,Mysql默认为1
show [global/session] variables like 'autocommit';		
#查看Mysql中的AUTOCOMMIT值,[global代表全局,session代表当前会话,都不加则默认当前会话]

二、MySQL存储引擎

(一)定义

       存储引擎是MySQL数据库中的组件,负责执行实际的数据I/O操作(数据的存储和提取)。工作在文件系统之上,数据库的数据会先传到存储引擎,再按照存储引擎的存储格式保存到文件系统。

(二)常用的存储引擎

1.MyISAM

       不支持事务、外键约束,只支持表级锁定,适合单独的查询和插入的操作,读写会相互阻塞,支持全文索引,硬件资源占用较小,数据文件和索引文件是分开存储的(存储成三个文件:表结构文件.frm、数据文件.MYD、索引文件.MYI)
使用场景:适用于不需要事务支持,单独的查询或插入数据的业务场景

2.InnoDB

       支持事务、外键约束,支持行级锁定(在全表扫描时仍然会表级锁定),读写并发能力较好,支持全文索引(5.5版本之后),缓存能力较好可以减少磁盘IO的压力,数据文件也是索引文件(存储成两个文件:表结构文件.frm、数据文件.ibd)
使用场景:适用于需要事务的支持,一致性要求较高,数据会频繁更新,读写并发高的业务场景

(三)查看存储引擎

show create table 表名;show table status [from 库名] where name='表名'\G
#查看表使用的存储引擎show engines;
#查看系统支持的存储引擎

(四)修改存储引擎

1.针对已存在的表修改存储引擎

alter table 表名 engine=InnoDB/MyISAM;             
#针对已存在的表修改存储引擎

2.新建表时指定存储引擎

create table 表名 (....) engine=InnoDB/MyISAM;     
#新建表时指定存储引擎

3.设置新建表的默认存储引擎

vim /etc/my.cnf    [mysqld]default-storage-engine=InnoDB/MyISAM         
#设置新建表的默认存储引擎

(五)死锁

1.现象

       死锁是指两个或多个事务在同一个资源上相互占用,并请求对方的锁定资源,从而导致循环的现象。

2.避免死锁

(1)设置事务超时等待时间 innodb_lock_wait_timeout
(2)设置开启死锁检测 innodb_deadlock_detect
(3)为表添加合理的索引,减少表锁发生的概率
(4)如果业务允许,可以降低隔离级别,比如采用 提交读 隔离级别
(5)建议开发人员尽量使用更合理的业务逻辑,多表操作时以固定顺序访问表,尽量避免同时锁定多个资源
(6)建议开发人员尽量保持事务简短,减少对资源的占用时间和占用范围
(7)建议开发人员在读多写少的场景下适用乐观锁机制

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

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

相关文章

微短剧,会成为长视频的“救命稻草”吗?

职场社畜秒变霸道总裁,普通女孩穿越成为艳丽皇妃.......这样“狗血”的微短剧,最近不仅在国内各大视频平台上异常火爆,而且还直接火出了国外。 所谓微短剧,就是单集时长从几十秒到十几分钟的剧集,有着相对明确的主题和…

基于 OV2640 的以太网 RGMII 图像传输系统设计

文章目录 前言一、UDP 协议的特点二、图像数据编码原理三、系统总体设计四、图像编码模块介绍4.1、图像编码模块作用4.2、图像编码模块功能实现4.3、仿真五、其他涉及模块说明六、顶层模块七、下载与验证前言 本节主要讲述了一种对数据以行为单位的编码方法。该方法采用摄像头…

树莓派Pi4B简介

树莓派是什么?Raspberry Pi(中文名为“树莓派”,简写为RPi,或者RasPi/RPi)是为学生计算机编程教育而设计,只有信用卡大小的卡片式电脑,其系统基于Linux。 树莓派4B与树莓派3B/3B参数对比: 具体的实物图如下&#xff1a…

PDF控件Spire.PDF for .NET【安全】演示:在 PDF 中添加或删除数字签名

随着 PDF 文档在商业中越来越流行,确保其真实性已成为一个关键问题。使用基于证书的签名对 PDF 进行签名可以保护内容,还可以让其他人知道谁签署或批准了该文档。在本文中,您将了解如何使用不可见或可见签名对 PDF 进行数字签名,以…

2023年教程汇总 | 《小杜的生信笔记》

2023年总结 2023年即将结束,我们即将迎来2024年。2023年,我们做了什么呢??这个是个值得深思的问题…? 12月份是个快乐且痛苦时间节点。前一段时间,单位需要提交2023年工作总结,真的是憋了好久才可以下笔…

国产编程语言MoonBit添加问号操作符

MoonBit更新 01. 添加内置类型 Result enum Result[T, E] {Ok(T)Err(E) }02. 添加问号操作符 新增了问号操作符,用于简化错误处理: fn may_fail() -> Option[Int] { ... }fn compose_may_fail() -> Option[String] {let x may_fail()?let y …

ioDraw AI:思维导图、流程图、序列图、类图、饼图,一应俱全

前言 在信息爆炸的时代,我们每天接收着大量的信息,如何高效地整理和呈现这些信息成为了一项重要的挑战。思维导图作为一种可视化思维工具,能够帮助我们快速构建和整理复杂的信息结构,便于我们理解和记忆。ioDraw AI绘图工具正是基…

RTOS_WDS

2023/12/25重启韦东山老师RTO 韦东山freeRTOS快速入门视频教程 P2 2-1堆的概念 堆 char heap_buf[1024]; int pos 0;void *my_malloc(int size) {int old_pos pos;pos size;return &heap_buf[old_pos]; }void my_free(void *buf) {/* err */ }int main(void) {char ch…

react+koa全栈开发 以及 部署流程

前端开发后端开发部署 前端开发 前端使用react、sass、TS、vite、pnpm进行开发,太详细的这里就不展开说了项目创建可以参考我的另外一篇文章 优雅地创建一个前端项目 后端开发 后端使用node,使用koa框架进行开发,数据库我使用的是一个mys…

Android studio 使用greenDao根据实体类生成dao类

1.遇到的问题 使用android studio根据实体类生成dao其实也很简单,你只要实现 Parcelable Entity public class ConfigDataModel implements Parcelable {Id(autoincrement true)private Long id null; } 2.使用自带的方法生成 使用build-->make Project生成 …

学Java的第二天

一、常量 1.值不可以变化的量。 2. 分类: 字符串常量 用双引号括起来的多个字符,可以包含 0、1 或多个,例如 "a" 、 "abc" 、 " 中国 " 整数常量,例如: -10 、 0 、 88 小数常量&…

在x64上构建智能家居(home assistant) (六) 安装Node-RED Companion Integration

点击HACS 搜索node-red 右侧单击后点击安装 安装完成后, 选设备

分别使用OVP-UVP和OFP-UFP算法以及AFD检测算法实现反孤岛检测simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 OVP-UVP算法 4.2 OFP-UFP算法 4.3 AFD检测算法 5.完整工程文件 1.课题概述 分别使用OVP-UVP和OFP-UFP算法以及AFD检测算法实现反孤岛检测simulink建模与仿真。 2.系统仿真结果 3.核心程序与模型…

Redis案例实战之Bitmap、Hyperloglog、GEO

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码、Kafka原理、分布式技术原理、数据库技术🔥如果感觉博主的文章还不错的…

【如何破坏单例模式(详解)】

✅如何破坏单例模式 💡典型解析✅拓展知识仓✅反射破坏单例✅反序列化破坏单例✅ObjectlnputStream ✅总结✅如何避免单例被破坏✅ 避免反射破坏单例✅ 避免反序列化破坏单例 💡典型解析 单例模式主要是通过把一个类的构造方法私有化,来避免重…

uniapp框架——vue3+uniFilePicker+fastapi实现文件上传(搭建ai项目第二步)

文章目录 ⭐前言💖 小程序系列文章 ⭐uni-file-picker 组件💖 绑定事件💖 uploadFile api💖 自定义上传 ⭐后端fastapi定义上传接口⭐uniapp开启本地请求代理devServer⭐前后端联调⭐总结⭐结束 ⭐前言 大家好,我是ym…

数据库原理及应用·关系数据库标准语言SQL

4.1 SQL概述 4.1.1 SQL的产生和发展 1.产生 1974年,SQL语言的雏形最早由美国IBM公司的Raymond F. Boyce和Donald D. Chamberlin提出 1975-1979年,在System R上首次实现,由IBM的San Jose研究室研制,称为SEQUEL 2.发展 1986年推…

猫头虎分享2023年12月17日博客之星候选--城市赛道博主文章数据

猫头虎分享2023年12月17日博客之星候选–城市赛道博主文章数据 博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开…

udp广播的例子

以下是一个使用C语言描述广播发送和接收的简单示例&#xff1a; 发送端&#xff08;广播发送&#xff09;&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #inclu…

Linux gdisk创建GPT分区

gdisk命令工具默认将磁盘划分为GPT格式的分区&#xff1a; lsblk 查看分区 创建GPT格式的分区&#xff1a; 列出磁盘分区表&#xff1a; fdisk -l 有一个新的磁盘sdc 下面将sdc进行GPT分区 输入gdisk /dev/sdc 输入&#xff1f;查看帮助文档&#xff1a; 输入n 创建新的分…