MySQL事务四种特性

MySQL事务四种特性,第1张

MySQL事务四种特性

文章目录

MySQL事务四种特性原子性(atomicity)原子性是什么

mysql是如何保证事务的原子性的 一致性(consistency)

一致性是什么怎么保证一致性 隔离性(isolation)

隔离性是什么怎么保证隔离性查看当前会话隔离级别的SQL语句脏读如何解决脏读不可重复读幻读 持久性(durability)

持久性是什么怎么保证持久性

MySQL事务四种特性

首先,我们常用的mysql存储引擎是,myisam和innodb两种引擎,想要使用事务就要用innodb引擎,事务一共有四种包括(原子性(atomicity),一致性(consistency),隔离性(isolation),持久性(durability))简称acid!

原子性(atomicity) 原子性是什么

事务的最小工作单元,要么全成功,要么全失败。

mysql是如何保证事务的原子性的

mysql数据通过undo log日志来保证事务的原子性!当事务开始时 undo log会将当前版本记录成日志,undo log日志记录了回滚 *** 作的日志,如果事务失败,则执行undo log日志上的回滚内容。在事务提交之后,undolog并不立即被删除,而是放入待清理的链表,由purge线程判断是否由其他事务在使用undo段中表的上一个事务之前的版本信息,决定是否可以清理undo log的日志空间。 一致性(consistency) 一致性是什么

事务开始和结束后,数据库的完整性不会被破坏。

怎么保证一致性

一致性就是:应用系统从一个正确的状态到另一个正确的状态.而ACID就是说事务能够通过AID来保证这个C的过程.C是目的,AID都是手段。 隔离性(isolation) 隔离性是什么

不同事务之间互不影响

怎么保证隔离性

mysql中有四种隔离级别,利用这四种隔离级别来满足隔离性,默认的隔离级别是可重复读。

查看当前会话隔离级别的SQL语句

查看当前会话的 隔离级别:
select @@tx_isolation;
查看系统的隔离级别:
select@@global.tx_isolation;
设置会话的隔离级别:
set session transaction isolation level 隔离级别;
设置当前系统的隔离级别:
set global transaction isolation level read 隔离级别
隔离级别为想要设置的隔离级别英文名称

脏读

脏读就是指当一个事务正在访问数据,并且对数据进行了修改,修改的数据先存储到Buffer pool中,还没有存粗到磁盘上。这时,另外一个事务也访问这个数据,然后使用了这个数据。
MySQL在更新数据的时候,都是将数据先从磁盘拉到buffer pool中, buffer pool在内存中,在buffer pool中修改完成后再写到磁盘中 如何解决脏读

事务隔离级别设置为:read committed及以上。读取时加排它锁(select…for update),事务提交才会释放锁,修改时加共享锁(update …lock in share
mode)。加排它锁后,不能对该条数据再加锁,能查询但不能更改数据。mysql
InnoDB引擎默认的修改数据语句,update,delete,insert都会自动给涉及到的数据加上排他锁,select语句默认不会加任何锁类型,如果加排他锁可以使用select
…for
update语句,如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁,共享锁下其它用户可以并发读取,查询数据。但不能修改,增加,删除数据。资源共享。 不可重复读

不可重复读是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。(重点是修改,同样的条件,你读取过的数据,再次读取出来发现值不一样了),mysql使用MVCC解决不可重复读。 幻读

幻读是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生 *** 作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。(重点是删除或者新增,同样的条件,第1 次和第 2 次读出来的记录数不一样)mysql使用MVCC和当前读解决幻读问题。 持久性(durability) 持久性是什么

事务提交后,对数据的修改是永久性的,即使系统故障也不会丢失。

怎么保证持久性

mysql写入数据的时候,每次都是把数据先写入内存,再往磁盘写 redolog,在适当时的时候,把数据写入磁盘。即便断电,重启mysql还是可以通过redolog来恢复数据。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5707249.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存