MySQL事务隔离:构建健壮的数据库行为(mysql事务隔离)

事务(transaction)就是将一组联系的SQL语句打包,当做一个整体处理的请求,它的机制用于在发生异常的时候撤销此次事务所执行的SQL,并返回到正确的状态。 mysql 事务使用Isolation级别来决定用户能够看到的数据,事务隔离就是为了避免并发时用户可能获取到错误的数据,造成数据污染。通常,MySQL有4种事务隔离级别:

– Read uncommitted:读取未提交的数据,在并发中可能出现脏读、不可重复读、虚读的情况;

– Read committed: 阻止了脏读,但会出现不可重复读,以及虚读的情况;

– Repeatable reads:阻止了脏读和不可重复读,但会出现虚读;

– Serializable:完全阻止了脏读、不可重复读,以及虚读。

MySQL默认事务隔离级别为REPEATABLE READ,不过可以通过设置参数来改变事务隔离级别。在mysql连接实例中可以使用”SET SESSION TRANSACTION ISOLATION LEVEL ” 命令设置变量:

mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW SESSION VARIABLES LIKE 'tx_isolation';
+---------------+---------------------+
| Variable_name | Value |
+---------------+---------------------+
| tx_isolation | READ-COMMITTED |
+---------------+---------------------+
1 row in set (0.20 sec)

仅仅设置事务隔离级别是不够的,要想让mysql的事务行为变得健壮,还需要有多种实现,例如长连接的原始连接、日志记录与部署、以及准实时校验等。如果跨节点事务,还可以考虑应用两阶段提交,把跨节点操作转换成了本地事务。

总之,要构建健壮的mysql事务行为,必须改变适当的隔离级别,以及采取更多的实现措施。这里需要注意,改变隔离级别会带来好处,但同时也会有降低性能的风险,所以要谨慎考虑。


数据运维技术 » MySQL事务隔离:构建健壮的数据库行为(mysql事务隔离)