美文网首页
MySQL-7事物与锁的关系

MySQL-7事物与锁的关系

作者: 安晓生 | 来源:发表于2021-08-24 11:14 被阅读0次

大家好,我是安小生,继续数据库的总结:MySQL的事物,
那么什么是事物呢?

事务是MySQL区别于NoSQL的重要特征,是保证关系型数据库数据一致性的关键技术。事务可看作是对数 据库操作的基本执行单元,可能包含一个或者多个SQL语句。这些语句在执行时,要么都执行,要么都不执 行。

事物的应用场景有那些呢?

  • 事物的场景使用:金额交易,跨表操作。银行,秒杀都会用到事物操作。
  • 事物的四大特性:
    原子性:要么全部执行,要么全部执行失败。
    一致性:要求数据由一个状态转化为另一个状态。
    持久性:保证数据不会丢失,
    隔离性:事物与事物之间不会互相影响。

事物的基本语法

  • 在 MySQL 命令行的默认设置下,事务是自动提交的,即执行了SQL 语句之后会马上执行 commit 操 作,我们可以设置 set autocommit=0 来禁用当前回话的自动提交。
  • 还可以用 begin 、start transaction 来显式的开始一个事务。
  • commit 在默认设置下是等价于 commit work 的,表示提交事务。
  • rollback 在默认设置下等价于 rollback work,表示事务回滚。
  • savepoint xxx 表示定义一个保存点,在一个事务中可以有多个保存点。
  • release savepoint xxx 表示删除一个保存点,当没有该保存点的时候执行该语句,会抛出一个异常。
  • rollback to [savepoint] xxx 表示回滚到某个保存点。

查询事物提交语句
show variables like '%commit%';

事物的隔离级别

  • 读取未提交:另一个事物修改了数据,但尚未提交,而本事物中的select会读到未被提交的数据,也是脏读
  • 读取已提交:一个A事物多次读取已经提交的数据,而B事物在读取的时候已经把改数据修改了,然后导致2个事物读取的数据不一样。
  • 可重读取(默认是RR):事物在开启的时候,select的结果是事物开始时间点的状态,因为select读取的数据会是一致的,但是会出现幻读
  • 串行化:最高的隔离级别,在这个隔离级别下,不产生任何异常,并发事物,就像事物是一个个按照顺序执行一样。

事物的生命周期

1 原子性的实现

begin;
  select * from user where id =1;.
commit;
rollback
事务日志文件 =》 重做日志 redo log =>ib_logfile0  重新执行
回滚日志 undo log =>ibdata       回滚数据
mysql对于事务的执行 => 日志先行凡是sql执行都会执行事务
日志优先级大于实际操作的数据的 所有执行的sql都会先执行日志,在写数据

事务重做日志与回滚日志

-- 查看事务日志 :
show engine innodb status\G;

-- 查看日志文件设置状态
show variables like 'innodb_%';

innodb_log_files_in_group:DB中设置几组事务日志,默认是2; innodb_log_group_home_dir:事务日志存放 目录,不设置,ib_logfile0...存在在数据文件目录下 Innodb存储引擎可将所有数据存放于ibdata*的共享表空 间,也可将每张表存放于独立的.ibd文件的独立表空间

注意:在MySQL中对于数据来说, 最为重要的是日志文件
redo log => ib_logfile0
undo log => ibdata

  • 重做日志
  • 持久化:事物被提交了,数据一定被写入到数据中了,并且被保存了,这样事物已经被提交了,就无法再次回滚了。
  • 重做日志持久化:与原子性一样,事务的持久性也是通过日志来实现的,MySQL 使用重做日志(redo log)实现事务的持久 性,重做日志由两部分组成,一是内存中的重做日志缓冲区,因为重做日志缓冲区在内存中,所以它是易 失的,另一个就是在磁盘上的重做日志文件,它是持久的。

知识点
在mysql中事务执行commit提交了之后,但是服务器挂了,数据还没有写入磁盘,在mysql重启服务之后会 重新执行这个重做日志写入数据。

  • 回滚日志

  • 原子性:专业点:事务就是一系列的操作,要么全部都执行,要都不执行。
  • 回滚原子性日志:想要保证事务的原子性,就需要在异常发生时,对已经执行的操作进行回滚,而在 MySQL 中,恢复机制是通过回滚日志(undo log)实现的,所有事务进行的 修改都会先记录到这个回滚日志中,然后在对数据库 中的对应行进行写入。

知识点:
系统发生崩溃、数据库进程直接被杀死后,当用户再次启动数据库进程时, 还能够立刻通过查询回滚日志将之前未完成的事务进行回滚,这也就需要回滚 日志必须先于数据持久化到 磁盘上,是我们需要先写日志后写数据库的主要原因。

重做日志与回滚日志

到现在为止我们了解了 MySQL 中的两种日志,回滚日志(undo log)和重做日志(redo log);在数据库 系统中,事务的原子性和持久性是由事务日志 (transaction log)保证的,在实现时也就是上面提到的两种 日志,前者用于对事务的影响进行撤销,后者在错误处理时对已经提交的事务进行重做,它们能保 证两 点:

  • 发生错误或者需要回滚的事务能够成功回滚(原子性);
  • 在事务提交后,数据没来得及写会磁盘就宕机时,在下次重新启动后能够成功恢复数据(持久性);在数据库中,这两种日志经常都是一起工作的,我们可以将它们整体看做一条事务日志,其中包含了 事务的 ID、修改的行元素以及修改前后的值。

相关文章

  • MySQL-7事物与锁的关系

    大家好,我是安小生,继续数据库的总结:MySQL的事物,那么什么是事物呢? 事务是MySQL区别于NoSQL的重要...

  • mysql事物与锁

    事务的四大特性 1.原子性 2.一致性 3.隔离性 4.持久性 事物在并发下产生的问题 1.更新丢失 2.脏读 3...

  • mysql事物与锁

    1 . 事物的四大特性 ACID 原子性 一致性 隔离性 持久性 2. 事物并发三大问题(数据库读一致性问题) 脏...

  • 当你看到彼此,美好的关系就此产生了!

    今天的主题是关系。为此,我专门在百度查询的关系的定义,关系,是指人与人之间人与事物之间以及事物与事物之间的联系,当...

  • 随记 | 为什么沟通这么难?

    关系是指人与人之间,人与事物之间,事物与事物之间的相互联系。人与人之间的关系都是双方的:君臣、父子、兄弟、夫妇、朋...

  • 《意志力红利》精华文摘

    1、认知过程,是我们认识事物的过程;情绪(情感)过程,是我们处理与事物关系的过程(正是与各种事物的不同关系,引发了...

  • mysql锁与事物隔离级别

    锁的定义 锁是计算机协调多个进程或线程并发访问某一资源的机制 锁分类 性能:乐观锁与悲观锁 操作:读锁和写锁(都属...

  • 查理.芒格100个思维模型之72:事物关系思维模型 2020

    事物关系思维模型 从量子纠缠的实验可以看到,这个世界的本质不是事物本身,而是基于事物与事物的关系。 未来的产品毛利...

  • 关系(人际关系)

    关系是指人与人之间,人与事物之间,事物与事物之间的相互联系。 人际关系是人与人之间在活动过程中直接的心理上的关系或...

  • 关系的定义

    关系是指人与人之间,人与事物之间,事物与事物之间的相互联系。 人际关系是人与人之间在活动过程中直接的心理上的关系或...

网友评论

      本文标题:MySQL-7事物与锁的关系

      本文链接:https://www.haomeiwen.com/subject/ucqdiltx.html