• 生活的道路一旦选定,就要勇敢地走到底,决不回头。——左拉
  • 坚强的信心,能使平凡的人做出惊人的事业。——马尔顿
  • 人不可有傲气,但不可无傲骨。 --徐悲鸿
  • 古之立大志者,不惟有超世之才,亦必有坚韧不拔之志。 --苏轼
  • 时间像海绵里的水,只要你愿意挤,总还是有的。 --鲁迅

MySQL中的事务

MySQL zkinogg 2年前 (2020-08-10) 259次浏览 0个评论

一、事务介绍

1.事物的周期

1)成功的周期

begin;
sql1;
sql2;
sql3;
...
commit;

2)失败的周期

begin;
sql1;
sql2;
sql3;
...
rollback;

2.事务的特性

A:原子性
C:一致性
I:隔离性
D:持久性

二、事务的日志

1.redo log

redo,顾名思义“重做日志”,是事务日志的一种

1)作用

在事务ACID过程中,实现的是“D”持久化的作用。

REDO:记录的是,内存数据页的变化过程

特性:WAL(Write Ahead Log)日志优先写

2)图解

abFvPH.jpg

3)文字描述流程

#修改
1)首先将表中id=1的行所在数据页加载到内存中data buffer page
2)MySQL实例在内存中将id=1的数据页改成id=2
3)id=1成id=2的变化过程会记录到,redo内存区域,也就是redo buffer page中
4)当敲下commit命令的瞬间,MySQL会将redo buffer page写入磁盘区域redo log
5)当写入成功之后,commit返回ok

#查询
1.首先将表中id=1的行所在数据页加载到内存中data buffer page
2.将redo log中id=1成id=2的变化过程取加载到redo buffer page
3.通过data buffer page和redo buffer page得到一个结果

2.undo log

undo,顾名思义“回滚日志”,是事务日志的一种

1)作用

在事务ACID过程中,实现的是“A”原子性的作用。当然CI的特性也和undo有关

2)图解

abkPqf.jpg

3.redo和undo的存储位置

#redo位置
[root@db01 data]# ll /application/mysql/data/
-rw-rw---- 1 mysql mysql 50331648 Aug 15 06:34 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 Mar  6  2017 ib_logfile1

#undo位置
[root@db01 data]# ll /application/mysql/data/
-rw-rw---- 1 mysql mysql 79691776 Aug 15 06:34 ibdata1
-rw-rw---- 1 mysql mysql 79691776 Aug 15 06:34 ibdata2

三、事务中的锁

1.什么是锁

“锁”顾名思义就是锁定的意思。

2.作用

在事务ACID特性过程中,“锁”和“隔离级别”一起来实现“I”隔离性的作用。

3.锁的类别

排他锁:保证在多事务操作时,数据的一致性。(在我修改数据时,其他人不得修改)
共享锁:保证在多事务工作期间,数据查询时不会被阻塞。

乐观锁:多实务操作时,数据可以同时修改,谁先提交,以谁为准
悲观锁:多实务操作时,数据只有一个人可以修改

4.多版本并发控制

1.只阻塞修改类操作(排他锁),不阻塞查询类操作(共享锁)
2.乐观锁的机制(谁先提交谁为准)

5.锁的粒度

1.MyIsam:表级锁
2.Innodb:行级锁

四、事务中的隔离级别

1.四种隔离级别

1.RU级别:READ UNCOMMITTED(独立提交):未提交读,允许事务查看其他事务所进行的未提交更改

2.RC级别:READ COMMITTED:允许事务查看其他事务所进行的已提交更改,查看不需要重新记入数据库

3.RR级别:REPEATABLE READ:允许事务查看其他事务所进行的已提交更改,查看数据需要重新进入数据库(InnoDB 的默认级别)

4.串行化:SERIALIZABLE:将一个事务的结果与其他事务完全隔离

2.查看隔离级别

#查看隔离级别
mysql> show variables like '%iso%';

3.设置隔离级别

1)设置RU级别

[root@db03 ~]# vim /etc/my.cnf
transaction_isolation=read-uncommit

2)设置RC级别

[root@db03 ~]# vim /etc/my.cnf
transaction_isolation=read-commit

4.名词

1.脏读:RU级别,执行事务修改数据,被读取,但是数据最终回滚了,查询到的数据就是脏读

2.幻读:删除所有表数据,删除的同时有人插入数据,查看数据时以为是没删干净

3.不可重复读:修改数据后被读取,被读取之后再次修改数据,两次数据不一致
喜欢 (1)
[17551054905]
分享 (0)

您必须 登录 才能发表评论!