暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL之事务及隔离级别

原创 何权林 2020-04-10
804

数据库事务: 是组成单一逻辑工作单元的操作集合。

一、事务的特性
事务的四个特性:ACID
1、原子性(atomicity):指处于同一个事务中的多条语句要么全部提交,要么全部失败回滚。
2、一致性(consistency):事务必须使数据库从一个一致性状态变换到另外一个一致性状态。比如转账,转账前两个账户余额之和为100,转账之后也应该是100。
3、隔离性(isolation):指多个事务之间互不干扰。
4、持久性(durability):事务一旦提交,就应该被永久保存起来。

二、事务隔离级别
如果不考虑事务的隔离性,会出现以下问题:
脏读:指一个事务中读取到了另外一个事务中未提交的数据。
不可重复读(虚读):指一个事务读取到了另外一个事务中提交后的更改数据(这里的读取就是指的select读取,即两次相同的查询)
幻读:指一个事务“读取”到了另外一个事务中提交后的更改数据(这里的读取指的是通过更改读取,即一次查询发现数据正常,然后再对数据修改却报错,感觉自己第一次读取的数据有问题了)。

几种隔离级别:

隔离级别 脏读 不可重复读 幻读
未提交读(Read uncommitted) 可能 可能 可能
已提交读(Read committed) 不可能 可能 可能
可重复读(Repeatable read) 不可能 不可能 可能
可串行化(Serializable ) 不可能 不可能 不可能

从上到下,级别越高,数据越安全,但性能越低,并发越低。
不同的隔离级别是在数据可靠性和并发性之间的均衡取舍。

注: 不可重复读、幻读与脏读的区别在于,脏读是在一个事务中读到了另一个事务未提交的数据;不可重复读与幻读是在一个事务中读到了另一个事务提交的数据。
而不可重复读与幻读的区别在于,不可重复读是指在一个事务中多次读的某条数据不一致(重点在update),幻读是指在一个事务中多次读的数据个数不一样(重点在insert、delete)

三、查看并修改数据库隔离级别
1、查询数据库隔离级别
会话级:
mysql> SELECT @@tx_isolation;
±----------------+
| @@tx_isolation |
±----------------+
| REPEATABLE-READ |
±----------------+
1 row in set, 1 warning (0.00 sec)

数据库级:
mysql> select @@global.tx_isolation;
±----------------------+
| @@global.tx_isolation |
±----------------------+
| REPEATABLE-READ |
±----------------------+
1 row in set, 1 warning (0.00 sec)

参数级:
mysql> show variables like ‘%isolation%’;
±----------------------±----------------+
| Variable_name | Value |
±----------------------±----------------+
| transaction_isolation | REPEATABLE-READ |
| tx_isolation | REPEATABLE-READ |
±----------------------±----------------+
2 rows in set (0.00 sec)

2、修改数据库隔离级别
语法:
SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL
{
REPEATABLE READ
| READ COMMITTED
| READ UNCOMMITTED
| SERIALIZABLE
}

会话级:
set session transaction isolation level repeatable read;

数据库级:
set global transaction isolation level repeatable read;

参数级:
vim /etc/my.cnf
transaction-isolation = READ-COMMITTED
注:如果想永久生效,就在参数文件中修改,数据库重启后也不会变。

最后修改时间:2020-09-11 14:00:29
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论