问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

事务和锁机制是什么关系? 开启事务就自动加锁了吗? 菜鸟,谢谢了。_百 ...

发布网友 发布时间:2022-04-25 16:23

我来回答

2个回答

热心网友 时间:2022-04-08 07:49

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 来解决幻读问题。

热心网友 时间:2022-04-08 09:07

事务与锁是不同的。事务具有ACID(原子性、一致性、隔离性和持久性),锁是用于解决隔离性的一种机制。事务的隔离级别通过锁的机制来实现。另外锁有不同的粒度,同时事务也是有不同的隔离级别的(一般有四种:读未提交Read uncommitted,读已提交Read committed,可重复读Repeatable read,可串行化Serializable)。在具体的程序设计中,开启事务其实是要数据库支持才行的,如果数据库本身不支持事务,那么仍然无法确保你在程序中使用的事务是有效的。锁可以分为乐观锁和悲观锁:悲观锁:认为在修改数据库数据的这段时间里存在着也想修改此数据的事务;乐观锁:认为在短暂的时间里不会有事务来修改此数据库的数据;我们一般意义上讲的锁其实是指悲观锁,在数据处理过程中,将数据置于锁定状态(由数据库实现)。回到你的问题,如果开启了事务,在事务没提交之前,别人是无法修改该数据的;如果rollback,你在本次事务中的修改将撤消(不是别人修改的会没有,因为别人此时无法修改)。当然,前提是你使用的数据库支持事务。还有一个要注意的是,部分数据库支持自定义SQL锁覆盖事务隔离级别默认的锁机制,如果使用了自定义的锁,那就另当别论。重点:一般事务使用的是悲观锁(具有排他性)。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 大家觉得白癜风容易复发吗? 白癜风复发的几率是多大 MySQL技术内幕:InnoDB存储引擎的目录 白癜风为什么会复发,要治疗多久才能治好? 《MySQL技术内幕InnoDB存储引擎》epub下载在线阅读全文,求百度网盘云... 白癜风好治吗?会复发吗? mysql select 会锁表吗 花菜炒五花的做法大全 为什么白癜风会复发? 五花肉炒花菜怎么做呢? 白癜风治好一定会复发吗怎么预防? 数据库老师会问哪些问题? 白癜风为什么会复发? innodb 为什么给索引加锁 白癜风会复发吗? 白癜风治疗好后会复发吗 怎么理解 MySQL 常见的两种存储引擎:MyISAM与InnoDB? mysql innodb自动加锁吗 苹果手机怎么设置动态屏保? mysql innodb select 和insert会产生锁吗 白斑病为什么会复发 事务和锁机制是什么关系? 开启事务就自动加锁了吗? 五花肉爆炒花菜的做法步骤图,怎么做好吃 春天到了白癜风都会复发吗,怎么做才不会复发呢? MySQL技术内幕:InnoDB存储引擎的介绍 mysql select会锁表吗 花菜炒肉需要准备好哪些食材呢? 如何做出好吃的五花肉炒花菜? 花菜炒五花肉怎么炒才好吃 泰国王室否认诗妮娜被封皇后,这个女人和王室有什么牵扯? 女儿也能继承王位,泰王的长女将来能继位吗? 泰国国王第一任妻子命运坎坷,悲剧一生,她有何经历呢? 泰国王后成笼中金丝雀,独占瑞士酒店7层,60名仆人伺候,你怎么看? 发生了什么,泰国国王为何恢复诗妮娜王室头衔? 41岁苏提达爱得卑微,膝盖跪红都不敢坐,泰国王后为何如此忍耐? 泰国王室否认诗妮娜获封皇后,她现在是什么地位? 诗琳通公主为什么没有成为泰国国王? 玛哈作为泰国国王,为何他有7个子女,但目前被承认的只有3个? 泰国国王富得流油,为何西米拉的皇冠却是绒布的? 注册公司,核名后,让填写资料 经营场所登记承诺书——怎么填呢