事务和锁机制是啥关系?开启事务就自动加锁了吗?菜鸟,谢谢了。

author author     2023-04-23     591

关键词:

1、事务与锁是不同的。事务具有ACID(原子性、一致性、隔离性和持久性),锁是用于解决隔离性的一种机制。

2、事务的隔离级别通过锁的机制来实现。另外锁有不同的粒度,同时事务也是有不同的隔离级别的。

3、开启事务就自动加锁。

ql规范定义的事务的隔离级别:

1.READ UNCOMMITTED(读取未提交内容)

所有事务可以看到未提交事务的执行结果,本隔离级别很少用到实际应用中,读取未提交的数据,又称为“脏读”。

2.READ COMMITTED(读取提交内容)

大多数数据库的默认隔离级别是此级别,但不是MySQL默认的。一个事务在开始的时候只能看见已提交事务所做的改变。一个事务从开始到提交前所做的任何改变都是不可见的,除非提交。这种隔离级别也称为不可重复读。

3.REPEATABLE READ(可重复读)

此隔离级别是为了解决可重复读隔离级别导致的问题即一个事务多个实例并发读取数据时会看到不同的结果。此隔离级别不会看到其他事务提交后的结果,即事务即使提交了我也看不到。此级别也称为“幻读”。

4.SERIALIZABLE(可串行化)

可串行化是最高的隔离级别,它通过强制事务排序,使之不可重读,解决了幻读的问题。此隔离级别会在每个读的数据行上加共享锁,使用这种隔离级别会产生大量的超时现象,一般实际开发中不会用到。

mysql加锁机制:

根据类型可分为共享锁(SHARED LOCK)和排他锁(EXCLUSIVE LOCK)或者叫读锁(READ LOCK)和写锁(WRITE LOCK)。

根据粒度划分又分表锁和行锁。表锁由数据库服务器实现,行锁由存储引擎实现。

mysql提供了3种事务型存储引擎,InnDB、NDB Cluster和Falcon。

一个事务执行的任何过程中都可以获得锁,但是只有事务提交或回滚的时候才释放这些锁。这些都是隐式锁定,也可以显式锁定,InnoDB支持显式锁定,例如:

SELECT .... LOCK IN SHARE MODE (加共享锁)

SELECT .....FOR UPDATE(加排他锁)

多版本并发控制(重要):

Mysql的事务存储引擎不是简单实用行加锁机制,而是叫多版本并发控制(MVCC)技术,和行加锁机制关联实用。以便应对更高的并发,当然是以消耗性能作为代价。

每种存储引擎对MVCC的实现方式不同,InnoDB引擎的简单实现方式如下:

InnoDB通过为每个数据航增加两个隐含值的方式来实现。这两个隐含值记录了行的创建时间,以及过期时间。每一行存储事件发生时的系统版本号。每一次开始一个新事务时版本号会自动加1,每个事务都会保存开始时的版本号,每个查询根据事务的版本号来查询结果。

MySQL使用以下几种机制进行隔离性的实现:         a.锁机制             通过使用加锁机制,使用其它事务无法到读某事务末提交前的数据更新,解决脏读问题;             mySQL 有:共享锁,排他锁,根据粒度,有行锁,表锁。         b.MVCC机制:          事务存储引擎使用多版本并发控制(MVCC)技术,和行加锁机制关联使用         MySQL 的InnoDB,XtraDB 引擎通过 使用MVCC 来解决幻读问题。

参考技术A 事务与锁是不同的。事务具有ACID(原子性、一致性、隔离性和持久性),锁是用于解决隔离性的一种机制。事务的隔离级别通过锁的机制来实现。另外锁有不同的粒度,同时事务也是有不同的隔离级别的(一般有四种:读未提交Read uncommitted,读已提交Read committed,可重复读Repeatable read,可串行化Serializable)。在具体的程序设计中,开启事务其实是要数据库支持才行的,如果数据库本身不支持事务,那么仍然无法确保你在程序中使用的事务是有效的。锁可以分为乐观锁和悲观锁:悲观锁:认为在修改数据库数据的这段时间里存在着也想修改此数据的事务;乐观锁:认为在短暂的时间里不会有事务来修改此数据库的数据;我们一般意义上讲的锁其实是指悲观锁,在数据处理过程中,将数据置于锁定状态(由数据库实现)。回到你的问题,如果开启了事务,在事务没提交之前,别人是无法修改该数据的;如果rollback,你在本次事务中的修改将撤消(不是别人修改的会没有,因为别人此时无法修改)。当然,前提是你使用的数据库支持事务。还有一个要注意的是,部分数据库支持自定义SQL锁覆盖事务隔离级别默认的锁机制,如果使用了自定义的锁,那就另当别论。重点:一般事务使用的是悲观锁(具有排他性)。本回答被提问者采纳

innodb中的事务隔离级别和锁的关系

http://blog.csdn.net/zcgsdu/article/details/44965753前言:我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式。同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁... 查看详情

linux12-mysql数据库-->11事务和锁机制(代码片段)

文章目录一、innodb核心特性事务1、什么是事务2、如何使用事务3、事务演示4、事务通俗理解5、一个成功事务的生命周期6、一个失败事务的生命周期7、事务的特性ACID8、事务的控制语句1)自动提交2)事务的隐式提交3ÿ... 查看详情

深入了解mysql的隔离级别和锁机制

简述:我们的MySQL一般会并发的执行多个事务,多个事务可能会并发的对同一条或者同一批数据进行crud操作;可能就会导致我们平常所说的脏读、不可重复读、幻读这些问题.这些问题的本质都是MySQL多事务并发问题,为了解决多事务... 查看详情

mysql之事务和锁机制(代码片段)

文章目录一、事务1.1事务特征1.2隔离级别1.3开启事务二、锁机制2.1读锁、写锁2.2全局锁、表锁、行锁2.3记录锁、间隙锁、临键锁提示:以下是本篇文章正文内容,MySQL系列学习将会持续更新一、事务在数据库里面,我... 查看详情

数据库事务与锁

开启事务就自动加锁。事务与锁是不同的。事务具有ACID(原子性、一致性、隔离性和持久性),锁是用于解决隔离性的一种机制。事务的隔离级别通过锁的机制来实现。另外锁有不同的粒度,同时事务也是有不同的隔离级别的。一... 查看详情

redis6事务和锁机制(代码片段)

目录事务基本操作错误机制悲观锁乐观锁Redis事务三特性秒杀案例超卖问题连接超时问题库存遗留问题事务        Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中ÿ... 查看详情

redis6事务和锁机制(代码片段)

目录事务基本操作错误机制悲观锁乐观锁Redis事务三特性秒杀案例超卖问题连接超时问题库存遗留问题事务        Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中ÿ... 查看详情

尚硅谷redis学习笔记--redis事务和锁机制

1.Redis的事务定义Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。Redis事务的主要作用就是串联多个命令防止别的命令插... 查看详情

关于数据库行锁与表锁的认识(代码片段)

MySQLMySQL(InnoDB存储引擎)默认是自动提交事务的,所以这个测试,需要先将MySQL的autocommit设置为0,关闭自动提交,需要自己手动提交事务--关闭自动提交setautocommit=0;--开启事务begin;这里我主要针对的是悲观锁,其实也就是行锁和表... 查看详情

工作四年都没搞定的mysql事务和锁机制,这篇一次讲清!(代码片段)

前言众所周知,事务和锁是mysql中非常重要功能,同时也是面试的重点和难点。本文会详细介绍事务和锁的相关概念及其实现原理,相信大家看完之后,一定会对事务和锁有更加深入的理解。什么是事务在维基百... 查看详情

orm中的事务和锁(代码片段)

锁models.Book.objects.select_for_update().filter(id=1)事务?全局开启事务#当有请求过来时,Django会在调用视图方法前开启一个事务。如果请求正确处理并正确返回了结果,Django就会提交该事务。否则,Django会回滚该事务。DATABASES='default&#... 查看详情

redis事务和锁机制

目录事务定义 事务操作命令 redis事务的错误处理 redis事务冲突问题    redis解决事务冲突的方法Redis事务的三个特性事务定义    redis事务是一个单独的隔离操作:事务中的所有命令都会序列化,按顺序的执行。事务... 查看详情

spring事务和事务传播机制(代码片段)

...面对😍系列专栏:Spring系列文章目录为什么需要事务Spring声明事务Transactional参数说明propagationisolationtimeout事务回滚失效解决方案@Transactional工作原理Spring事务的传播机制为什么需要事务传播机制?传播机制的类型... 查看详情

高频|mysql事务隔离级别和锁的机制可以这么答

...例分析案例解答死锁产生的四个必要条件:案例背景MySQL的事务隔离级别(IsolationLevel),是指:当多个线程操作数据库时,数据库要负责隔离操作,来保证各个线程在获取数据时的准确性。它分为四个不同... 查看详情

mysql中的锁机制

...是为了解决问题而生的,锁被用来实现隔离性,保证并发事务的正确性。两段锁&一次封锁两段锁数据库遵循的是两段锁协议,将事务分成两个阶段,加锁阶段和解锁阶段(所以叫两段锁)加锁阶段:在加锁阶段只能进行加锁... 查看详情

mysql事务和锁(代码片段)

1.事务2.锁  1.事务什么是事务?事务是指一组业务操作,要么全部成功,要么全部失败。比如银行转账业务,步骤一:从A账户减少300元;步骤二:向B账户增加300元。为了确保总的金额不变,就要维持数据的一致性,那么... 查看详情

mysql的隔离级别和锁的关系

  MySql的隔离级别和锁的关系 一、事务的4个基本特征 Atomic(原子性): 事务中包括的操作被看做一个逻辑单元。这个逻辑单元中的操作要 么所有成功。要么所有失败。 Consistency(一致性): 仅仅... 查看详情

mysql中的锁机制(代码片段)

...是为了解决问题而生的,锁被用来实现隔离性,保证并发事务的正确性。两段锁&一次封锁两段锁数据库遵循的是两段锁协议,将事务分成两个阶段,加锁阶段和解锁阶段(所以叫两段锁)加锁阶段:在加锁阶段只能进行加锁... 查看详情