Mysql事务
事务的基本概念
事务(Transation):作为一个单独单元的一个或者多个sql语句组成。这个单元中的每一个sql语句都是相互依赖的,而且单元作为一个整体是不可分割的。如果单元中的一个语句不能成功完成,整个单元就会回滚。所有影响到的数据库将返回事务开始以前的状态。因此,只有事务中所有语句都被成功的执行才能说整个事务被成功执行。
事务与ACID属性:
- 原子性Atomicity
- 一致性Consistency
- 孤立性Isolation
- 持久性Durability
事务的生命周期:
通过start transaction/begin/begin work语句开始,以commit或rollback语句结束。
事务隔离级别
事务的隔离级别数据安全性从高到低,性能从低到高分为以下四个:
- serializable 序列化隔离:按顺序执行事务。
- repeatable read 可重复读(Mysql默认):事务开启后,就算别的事务修改了原来的数据,也不会影响当前事务的数据。
- read committed 提交读:事务开启后,别的事务提交后修改了原来的数据,当前事务在修改数据后会读取别的事务修改后的数据。
- read uncommitted 未提交读:事务开启后,别的事务修改了数据还未提交,当前事务也会读取到修改后的数据。如果别的事务回滚了,当前事务就读取到了错误的数据。
1 | -- 查询全局的或者本次连接session的隔离级别 |
事务性能
使用事务表时,提高性能的一些方法:
- 使用小事务
- 选择合适的隔离级别,平衡性能、安全性。
- 保证开始事务前一切都是可行的
- 避免死锁
锁:表锁定、页锁定、行锁定。
1 | -- 对表xxx进行read锁 使各个链接对表可以读而不能写 |