mysql事务
2016-12-02 11:26:35 0 举报
AI智能生成
MySQL事务是一组原子性的SQL操作,这些操作要么全部成功执行,要么全部失败回滚。事务具有四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),简称ACID。原子性确保事务中的所有操作要么全部完成,要么全部不完成;一致性要求在事务开始和结束时,数据库保持一致状态;隔离性防止多个事务同时执行时互相干扰;持久性指一旦事务提交,其对数据库的更改就是永久性的。使用事务可以确保数据的完整性和可靠性,避免因并发操作导致的数据不一致问题。
作者其他创作
大纲/内容
作用
保证数据库操作的原子性,要么成功,要么失败。
特点
原子性
:事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
一致性
事务在完成时必须保持数据的一致性
隔离性
多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
持久性
一个事务一旦提交,他对数据库的修改应该永久保存在数据库中。
查看事务是否为自动提交
show variables like 'autocommit'
查看数据库隔离级别
select @@tx_isolation
默认的行为(不带session和global)是为下一个(未开始)事务设置隔离级别。如果你使用GLOBAL关键字,语句在全局对从那点开始创建的所有新连接(除了不存在的连接)设置默认事务级别。你需要SUPER权限来做这个。使用SESSION 关键字为将来在当前连接上执行的事务设置默认事务级别。 任何客户端都能自由改变会话隔离级别(甚至在事务的中间),或者为下一个事务设置隔离级别。
修改数据库隔离级别
set seesion transaction isolation level (隔离级别名)
隔离级别(由高到低)
可序列化(Serializable)
set session transaction isolation level Serializable
这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。SERIALIZABLE 事务隔离级别最严厉,在进行查询时就会对表或行加上共享锁,其他事务对该表将只能进行读操作,而不能进行写操作。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。
可重复读(repeated read)
set session transaction isolation level repeatable read
这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。
提交读(commited read)
set session transaction isolation level read committed;
在一个事务修改数据过程中,如果事务还没提交,其他事务不能读该数据。
未提交读(uncommited read)
set session transaction isolation level read uncommitted
在该隔离级别,所有事务都可以看到其他未提交(commit)事务的执行结果。
本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。
读取未提交的数据,也被称之为脏读(Dirty Read)。
本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。
读取未提交的数据,也被称之为脏读(Dirty Read)。
读现象
幻读
脏读
不可重复读
锁机制
下回分享
0 条评论
下一页