数据库事务

来源:互联网 发布:零一数据分析 编辑:程序博客网 时间:2024/05/19 22:47

1、事务的四大特性:

(1)原子性(Atomicity):事务是一个不可分割的工作单位,事物中的事物要么都发生,要么都不发生。

(2)一致性(Consistency):事务前后数据的完整性必须保持一致。(转账前后钱的总数保持不变)

(3)隔离性(Isolation):多个用户并发访问数据库时,一个用户的事务不被其他用户的事物所干扰,多个并发事物之间相互隔离。

(4)持久性(Durability):事务一旦提交,他数据库中的数据改变就是持久性的,接下来即使数据库发生故障也不应该对其有任何影响。(只要提交commit,就必须执行事物)

2、不考虑隔离性的问题:

(1)脏读:一个事务读取另一个事务未提交的事物。(别的事务读到数据后,修改数据的事务回滚)

(2)不可重复读:在一个事务中读取数据,读到了别的事务更新的数据,读取的数据不一致。(未提交事物时(一个事务未结束),数据被别的事务修改,在次读取数据)

(3)虚读(幻读):一个事务内读取到别的事物插入的数据。(未提交事务时(一个事物未结束),表被别的事务插入新的数据,此事务再次获取表中的数据)

3、事务的隔离级别:

Serializable:可避免脏读,不可重复读,虚读情况的发生。
Repeatable read:可避免脏读,不可重复读情况的发生。
Read committed:可避免脏读情况的发生。Mysql默认情况
Read uncommitted:所有情况均无法保证。

4、对事务的操作

(1)命令行中事物操作:

开启事务:start transaction回滚事务:Rollback提交事务:Commit

(2)程序中事务操作:

开启事务:Connection.setAutoCommit(flase);关闭默认提交,即开启事物回滚事务:Connection.rollback():提交事务:COnnection.commit():提交事物

(3)设置事务回滚点:

SavePoint sp = Connection.setSavePoint();Connection.rollback(sp);放在catch中,手动回滚后一定要记得提交事务

(4)命令行设置事务隔离级别:

set transaction isolation level 级别查看隔离级别:select @@tx_isolation

(5)程序中设置事务隔离级别:

//隔离级别是设置给Connection的conn.setTransactionIsolation(Connection.级别)