特点
原子性
<span style="color: rgb(153, 153, 153); font-family: "Microsoft Yahei"; font-size: 16px;">:事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。</span>
一致性
<span style="color: rgb(153, 153, 153); font-family: "Microsoft Yahei"; font-size: 16px;">事务在完成时必须保持数据的一致性</span>
隔离性
<span style="color: rgb(153, 153, 153); font-family: "Microsoft Yahei"; font-size: 16px;">多个事务并发执行时,一个事务的执行不应影响其他事务的执行。</span>
持久性
<span style="color: rgb(153, 153, 153); font-family: "Microsoft Yahei"; font-size: 16px;">一个事务一旦提交,他对数据库的修改应该永久保存在数据库中。</span>
查看事务是否为自动提交
show variables like 'autocommit'
<span style="color: rgb(102, 102, 102); font-family: 宋体, Arial; font-size: 15px;">默认的行为(不带session和global)是为下一个(未开始)事务设置隔离级别。如果你使用GLOBAL关键字,语句在全局对从那点开始创建的所有新连接(除了不存在的连接)设置默认事务级别。你需要SUPER权限来做这个。使用SESSION 关键字为将来在当前连接上执行的事务设置默认事务级别。 任何客户端都能自由改变会话隔离级别(甚至在事务的中间),或者为下一个事务设置隔离级别。</span><span style="font-size: 12px;"> </span>
修改数据库隔离级别
set seesion transaction isolation level (隔离级别名)
隔离级别(由高到低)
可序列化(<span style="color: rgb(85, 85, 85); font-family: "Times New Roman"; font-size: 15px;">Serializable</span>)
set session transaction isolation level <span style="color: rgb(85, 85, 85); font-family: "Times New Roman"; font-size: 15px;">Serializable</span>
<p style="box-sizing: border-box; margin: 1.5em 0px; color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "WenQuanYi Micro Hei", "Microsoft Yahei", sans-serif; font-size: 14px;">这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。SERIALIZABLE 事务隔离级别最严厉,在进行查询时就会对表或行加上共享锁,其他事务对该表将只能进行读操作,而不能进行写操作。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。</p><div><br></div>
可重复读(repeated read)
set session transaction isolation level repeatable read
<span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "WenQuanYi Micro Hei", "Microsoft Yahei", sans-serif; font-size: 14px;">这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。</span><span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "WenQuanYi Micro Hei", "Microsoft Yahei", sans-serif; font-size: 14px;">幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。</span>
提交读(commited read)
set session transaction isolation level read committed;
<span style="color: rgb(85, 85, 85); font-family: "Microsoft Yahei"; font-size: 15px;">在一个事务修改数据过程中,如果事务还没提交,其他事务不能读该数据。</span>
未提交读(uncommited read)
set session transaction isolation level read uncommitted
<span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "WenQuanYi Micro Hei", "Microsoft Yahei", sans-serif; font-size: 14px;">在该隔离级别,所有事务都可以看到其他未提交(commit)事务的执行结果。</span><br style="box-sizing: border-box; color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "WenQuanYi Micro Hei", "Microsoft Yahei", sans-serif; font-size: 14px;"><span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "WenQuanYi Micro Hei", "Microsoft Yahei", sans-serif; font-size: 14px;">本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。</span><br style="box-sizing: border-box; color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "WenQuanYi Micro Hei", "Microsoft Yahei", sans-serif; font-size: 14px;"><span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "WenQuanYi Micro Hei", "Microsoft Yahei", sans-serif; font-size: 14px;">读取未提交的数据,也被称之为脏读(Dirty Read)。</span>