mysql事务特性及隔离级别整理

来源:互联网 发布:睿至大数据孙亮 编辑:程序博客网 时间:2024/06/06 13:29
数据库事务的四大特性(ACID)
⑴ 原子性(Atomicity)原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。
⑵ 一致性(Consistency)是指事务必须使数据库在一个事务执行之前和执行之后都必须处于一致性状态,转账时不管两用户之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是之前的总和,这就是事务的一致性。
⑶ 隔离性(Isolation)是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。即对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。
⑷ 持久性(Durability)是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
    

数据库事务的四个隔离级别
⑴ Read uncommitted-读未提交 脏读,事务B读取了事务A尚未提交的数据。
⑵ Read committed-读提交 是一个事务要等另一个事务提交后才能读取数据。若有事务对数据进行更新(UPDATE)操作时,读操作事务要等待这个更新操作事务提交后才能读取数据,可以解决脏读问题。但在这个事例中,出现了一个事务范围内两个相同的查询却返回了不同数据,这就是不可重复读,不能读到相同的数据内容。
⑶ Repeatable read-重复读 就是在开始读取数据(事务开启)时,不再允许修改操作。重复读可以解决不可重复读问题。不可重复读对应的是修改,即UPDATE操作。但是可能还会有幻读问题。因为幻读问题对应的是插入INSERT操作,而不是UPDATE操作。当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。
MySQL内部通过MVCC-多版本控制机制-实际上对读取到的数据加锁来解决幻读,故可以使用Repeatable Read这个事务隔离级别。Serializable事务隔离级别效率较低下,影响性能,一般不使用。
⑷Serializable-序列化
在MySQL数据库中查看当前事务的隔离级别:
select @@tx_isolation;
在MySQL数据库中设置事务的隔离级别:
set transaction isolation level repeatable read;
set tx_isolation=’read-uncommitted’;
隔离级别的设置只对当前链接有效。对于使用MySQL命令窗口而言,一个窗口就相当于一个链接,当前窗口设置的隔离级别只对当前窗口中的事务有效;对于JDBC操作数据库来说,一个Connection对象相当于一个链接,而对于Connection对象设置的隔离级别只对该Connection对象有效,与其他链接Connection对象无关。
0 0
原创粉丝点击