MySQL---事务及锁机制

news2024/11/19 9:36:21

MySQL之事务以及锁机制


文章目录

  • MySQL之事务以及锁机制
  • 事务
    • 事务的操作
      • 1、开启事务:start Transaction
      • 2、提交事务:commit Transaction
      • 3、回滚事务:Rollback Transaction
      • set命令
    • 事务的特性---ACID
    • 事务的隔离级别
      • 1.READ UNCOMMITTED 读未提交
      • 2.READ COMMITTED 读提交
      • 3.REPEATEABLE READ 可重复度
      • 4.SERIALIZABLE 序列化
  • 锁机制
    • 对数据操作粒度分
    • 对数据操作类型分
    • MyISAM---表级锁
    • InnoDB---行级锁
      • 行锁特点
      • 行锁模式


事务

在MYSQL中的事务(Transaction)是由存储引擎实现的,在MySQL中,只有lnnoDB存储引擎才支持事务。

事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行。

事务用来管理DDL、DML、DCL操作,比如insert,update,delete语句,默认是自动提交的。

在这里插入图片描述


事务的操作

1、开启事务:start Transaction

任何一条DML语句(insert、update,delete)执行,标志事务的开启

命令BEGIN或START TRANSACTION;

2、提交事务:commit Transaction

成功的结束,将所有的DML语句操作历史记录和底层硬盘数据来一次同步

命令:COMMIT;

3、回滚事务:Rollback Transaction

失败的结束,将所有的DML语句操作历史记录全部清空

命令:ROLLBACK;

set命令

之前的所有SQL操作其实也有事务,只是MYSQL自动帮我们完成的,每执行一条SQL时MYSQL就帮我们自动提交事务,因此如果想要手动控制事务,则必须关闭MYSQL的事务自动提交。在MYSQL中直接用SET来改变MYSQL的自动提交模式。

set autocommit=0;  禁止自动提交
set autocommit=1;  开启自动提交

在这里插入图片描述

事务的特性—ACID

原子性(Atomicity):事务是一个不可分割的整体,事务开始后的所有操作,要么全部完成,要么全部不做

一致性(Consistency):系统从一个正确的状态,迁移到另一个正确的状态

隔离性(Isolation):每个事务的对象对其他事务的操作对象互相分离,事务提交前对其他事务不可见

持久性(Durability):事务一旦提交,则其结果是永久性的

事务的隔离级别

1.READ UNCOMMITTED 读未提交

一个事务可以读取另一个未提交事务的数据,最低级别,任何情况都无法保证,会造成脏读

2.READ COMMITTED 读提交

一个事务要等另一个事务提交后才能读取诗句,可皮面脏读的发生,会造成不可重复读

3.REPEATEABLE READ 可重复度

就是在开始读取数据(事务开启时),不再允许修改操作,可避免脏读,不可重复读的发生,但是会造成幻读

4.SERIALIZABLE 序列化

是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读,不可重复读与幻读。但是这种事务隔离级别低下,比较耗数据库性能,一般不使用

mysql的默认隔离级别是 repeatable read

一查看隔离级别
show variables like '%isolation%';
—设置隔离级别
1.设置read uncommitted
set session trancton isolation level read uncommitted;
2.设置read committed
set session transaction isolation level read committed;
3.设置repeatable read
set session transaction isolation level repeatable read;
4.设置serializable
set session transaction isolation level serializable;

在这里插入图片描述


锁机制

锁是计算机协调多个进程或线程并发访问某一资源的机制(避免争抢)。
在数据库中,除传统的计算资源(如CPU,RAM,I/0等)的争用以外,数据也是一种供许多用户共享的资源。
如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。

对数据操作粒度分

表锁:操作时,会锁定整个表
行锁:操作时,会锁定当前操作行

在这里插入图片描述

对数据操作类型分

读锁(共享锁):针对同一份数据,多个读操作可以同时进行而互不影响
写锁(排他锁):当前操作没有完成之前,它会阻断他写锁和读锁

在这里插入图片描述

MyISAM—表级锁

加读锁: lock table table_name read;
加写锁: lock table table_name write;
解锁:unlock tables;

InnoDB—行级锁

行锁特点

行锁持点:偏向InnoDB存储引擎,开销大加锁慢;会出现死锁:锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

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

行锁模式

InnoDB实现了以下两种类型的行锁。

共享锁(S):又称为读锁,简称s锁,共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。

排他锁(X):又称为写锁,简称×锁,排他锁就是不能与其他锁并存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁,但是获取排他锁的事务是可以对数据就行读取和修改。

对于UPDATE、DELETE和INSERTE语句,InnoDB会自动给涉及数据集加排他锁(x)
对于普通SELECT语句,InnoDB不会加任何锁

共享锁(s):select * from table_name where····lock in share mode
排它锁(x):select * from table_name where····for update

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

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

相关文章

毒鸡汤 | PHPStudy搭建web项目

文章目录前言展示准备工作环境创建网站新建数据库PHP7现成版自己折腾版前言 折腾了很久,终于自己改成功了。问题不多,主要原因是自己没怎么开发过,不熟悉数据库连接原理,现在回头看真的改的很简单。问题主要是现在用的PHP7和旧版的…

I-03数据结构与算法(python版)

最近学习数据结构,对于从未接触过数据结构的我来说,老师不仅讲解理论,还有代码的逐层分析,非常不错,受益匪浅!!!(以下是学习记录) 数据结构与算法&#xff0…

DEiT:通过注意力训练数据高效的图像transformer 蒸馏

摘要 最近,纯基于注意力的神经网络被证明可以解决图像理解任务,如图像分类。这些高性能的是使用大型基础设施预先训练数以亿计的图像,从而限制了它们的采用。 本文仅通过在Imagenet上训练,产生有竞争力的无卷积transformer。我们…

react原理-transition概念

在react18之中,引入了transition的概念。而且有一个新的api和两个新的hooks startTransitionuseTransitionuseDeferredValue 场景应用: 比如通过输入框输入内容更新列表内容,对于用户来说,输入框输入之后立马反馈的优先级是高过…

VS ChatGPT 中文版插件安装

1.打开Visual Studio Code 2.搜索chatGpt中文版 3.安装完后,重启一下软件 有国模式和国外模式,更多的教程请看插件作者的视频教程

分布式事物

Seata实践 XA模式 AT模式 TCC模式 性能 Saga模式 高可用------集群的形式 Seata实践解决方案 解决方式 Seata 引入服务协调者模式 实践步骤: 分布式事物的入口方法,会调用其他的微服务,每次调用的服务都是一个分支事物调用了多少个分支事…

SpringSecurity 认证实现

在之前一篇 博客 已经说明了 SpringSecurity 认证与授权的原理。这篇用来具体实现一下。 1、新建SecurityConfig 并创建认证管理器 Bean public AuthenticationManager authenticationManager() {... }2、新建认证提供者 Configuration public class SystemUserPasswordAuth…

Oracle项目管理之PrimaveraUnifier组织-业主/合作伙伴公司

目录 一、业主公司 二、合作伙伴公司 三、成员公司 Oracle Primavera Unifier 是企业项目协同管理系统,在国际化项目管理中,在进行常规的业务管理之外,对合同公司/EPC或分包供应商也有一定的管理要求,在Unifier中为了更好的实现…

sja1000 CAN驱动学习、调试记录(基于PeliCan Mode)

一、基础知识 网上讲sja1000 CAN总线控制器的资料很多,这里放一个引路贴:(151条消息) CAN总线控制器SJA1000_FATE的博客-CSDN博客_sja1000 BasicCAN Mode:仅支持11位的ID。 PeliCan Mode:在扩展模式下,允许使用 11 位 …

找出DataFrame中指定数据类型的列:select_dtypes()函数

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 找出DataFrame中指定数据类型的列 select_dtypes()函数 选择题 下列说法错误的是? import pandas as pd myDF pd.DataFrame({A:[1,2],B:[1.0,2.0],C:[a,b]}) print("【显示】myDF&qu…

leecode#同构字符串#反转链表

题目描述: 给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一…

ReentrantLock详解

JUC中的锁API 在juc中有一个Lock接口他的作用和synchronized相似都是为了保证线程安全性提供的解决方案 Lock中定义了一系列释放锁和抢占锁相关的API lock() 抢占锁资源 如果当前线程没有抢占到锁 则阻塞 tryLock() 尝试抢占锁资源 如果抢占成功则返回true 否则返回false unlo…

简单的深度活体智能记忆模型

🍿*★,*:.☆欢迎您/$:*.★* 🍿 正文

基于Antd Input组件自定义Input的成功状态

前言 Ant Design的Input组件的有一个状态的Api 需求 公司自研UI组件,在Antd的基础上进行开发。其中Input组件除了警告与错误状态外,还增加了成功的状态。如下图⬇️ 开发实现 方案一:覆盖CSS样式 一开始准备通过判断状态来增加类名&am…

软件工程习题

软件工程第一章 软件与软件工程作业第二章 可行性研究作业第三章 需求分析作业第四章 总体设计作业第五章 详细设计作业第六章 软件编码测验第七章 软件测试作业选择判断简答题第一章 软件与软件工程作业 一、单选题(共7题,58.1分) 1、软件是…

刷题13-左右两边子数组的和相等

题目012-左右两边子数组的和相等 思路:用到了三个循环,从头到尾遍历数组,比较左右两边数组的和是否相等,当然这种思路时间复杂度也比较高 核心代码: class Solution {public int pivotIndex(int[] nums) {int sum1,…

6.2 、MyBatis 高级映射(resultMap 标签多表联查 , 一对多,多对一关系)

文章目录一、实现多表联查(association 标签)1、实现多对一关系结果集映射二、实现多表联查(collection 标签)一、实现多表联查(association 标签) association 标签: 实现一对一,多…

因果推断1--基本方法介绍(个人笔记)

目录 一、因果推断介绍 1.1 什么是因果推断 1.2为什么研究因果推断 1.3因果推断阶梯 1.4因果推断问题分类 二、因果推断理论框架 2.1 定义(这些定义后面会经常用到) 2.2 Assumptions(三大基本假设) 三、因果效应估计 3.1 因果效应…

JavaEE【Spring】:SpringBoot 配置文件

文章目录一、配置文件的作用二、配置文件的格式1、注意2、说明三、properties 配置文件说明1、基本语法2、读取配置文件① 注意3、优缺点四、yml 配置文件说明1、基本语法2、yml 使用进阶① yml 配置不同数据类型及 nullⅠ. yml 配置读取Ⅱ. 练习a. 值为 null 的配置b. 根本不存…

利用云服务器发布项目

前言 平时开发我会写一些小demo,我自己觉得有用的会集中起来形成一个项目,本来想利用gitee的gitee page直接部署出来,但后面了解了下,它只支持官网之类的静态页面,无法与后台数据交互,想要完整的服务还是得…