MySQL事务隔离整理

事务:保证一组数据库操作,要么全部成功,要么全部失败。MySQL中事务支持在引擎层实现。MySQL是一个支持多引擎的系统,不是所有的MySQL引擎都支持事务。

1.事务ACID原则

Atomicity,Consistency,Isolation,Durability

2.事务隔离级别(多事务数据处理)

读未提交:可读取到另一个未提交的事务数据变更,会出现脏读,不可重复读。

读提交:只有事务提交之后,其他事务才可读取到它的值;另一个意思:一旦事务提交,其他事务就能读取到它的值。会出现不可重复读。

可重复读:一个事务看到的值,与这个事务启动时看到的值是一致的。另一个意思:其他事务提交了,如果当前事务没提交,其他事务的提交对当前事务来讲无意义。会出现幻读:比如一个事务要更新所有的数据,但是另一个事务新增了一条数据,那么操作第一个事务的人会发现表中还存在没有修改的一行数据。

串行化:对于同一行数据,事务操作严格按顺序执行。读数据加读锁,写数据加写锁。

事务隔离级别由上往下性能从高到底,安全性由低到高变化。一般MySQL隔离基本为可重复读。

3.事务隔离怎么实现的?

每次数据修改都记录一条回滚日志,如果某个事物需要回滚,会严格按照记录的回滚日志依次回滚。

4.长事务,短事务。

如果一个事务很长时间不提交,即为长事务,长事务会导致回滚日志不删除,所以尽量不要使用。

5.事务启动方式

(1)显示启动:begin transaction,存在多一次交互问题,即begin语句的开销,可以使用commit work and chain语法优化。

(2)set autocommit=0。将自动提交关闭,执行select语句时就开启了事务,需要手动提交事务,否则可能导致长事务问题。

猜你喜欢

转载自www.cnblogs.com/wenthing/p/10877434.html