mysql性能优化-事务

mysql性能优化-事务

Innodb的特性

 

什么是事务

事务:

数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;

事务是一组不可在分割的操作集合(工作逻辑单元);

事务:

数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;

事务是一组不可再分割的操作集合(工作逻辑单元);

典型事务场景(转账):

update user_account set balance = balance - 1000 where userID = 3;

update user_account set balance = balance +1000 where userID = 1;

mysql中如何开启事务:

begin / start transaction -- 手工

commit / rollback -- 事务提交或回滚

set session autocommit = on/off; -- 设定事务是否自动开启

JDBC 编程:

connection.setAutoCommit(boolean);

Spring 事务AOP编程:

expression=execution(com.gpedu.dao..(..))

事务ACID特性

原子性(Atomicity)

最小的工作单元,整个工作单元要么一起提交成功,要么全部失败回滚

一致性(Consistency)

事务中操作的数据及状态改变是一致的,即写入资料的结果必须完全符合预设的规则, 不会因为出现系统意外等原因导致状态的不一致

隔离性(Isolation)

一个事务所操作的数据在提交之前,对其他事务的可见性设定(一般设定为不可见)

持久性(Durability)

事务所做的修改就会永久保存,不会因为系统意外导致数据的丢失

事务并发带来了哪些问题

脏读问题图

不可重复读问题图

幻读问题图

事务四种隔离级别

SQL92 ANSI/ISO标准: http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt

Read Uncommitted(未提交读) --未解决并发问题

事务未提交对其他事务也是可见的,脏读(dirty read)

Read Committed(提交读) --解决脏读问题

一个事务开始之后,只能看到自己提交的事务所做的修改,不可重复读(nonrepeatable read)

Repeatable Read (可重复读) --解决不可重复读问题

在同一个事务中多次读取同样的数据结果是一样的,这种隔离级别未定义解决幻读的问题

Serializable(串行化) --解决所有问题

最高的隔离级别,通过强制事务的串行执行

MySQL默认的事务隔离级别是RR级别(可重复读)

Innodb引擎对隔离级别的支持程度

 

隔离级别到底如何实现的呢?看《mysql性能优化-锁》文章

发布了107 篇原创文章 · 获赞 96 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/madongyu1259892936/article/details/98633070
今日推荐