事务
事务是数据库中的一个特性
事务是一个不可分割的整个操作
是对同一个事务中的多个sql语句,在执行时要么都成功,要么都失败
事务的四特性acid
原子性:整个事务是不可分割的最小单位,执行时只有成功和失败其一
隔离性:多个事务间能否互相影响,一个事物处理对另一个事务的处理的影响
持久性:事务完毕,数据保留下来
一致性:保证数据的完整型约束
事务的开始:当执行某个select,update,insert,delete语句,事务开始
执行结束后,事务结束(mysql数据库,javaJDBC)
事物并发问题
多个事务同时操作同一表时,出现并发问题
脏读:当A事务对表中数据进行修改时,但没有提交
B事务查询语句,看到了A数据修改了没有提交的数据
这是A事务把数据回滚
不可重复读:A事务查询数据时 B事务对表中数据进行修改
A事务在查询时与前一次查询的数据不一致
幻读:A事务查询数据时,B事务对标中进行了添加或删除操作
A事务再查询,数据多或者少的情况
事物的隔离级别
读取未提交数据(read uncommitted)
读取已提交数据(read committed):可以避免脏读
可重复读(repeatable read)
串行话(serializable):当A事务对表进行增删改查时,
事务没有结束,其他事务不能对表进行任何操作
Mysql默认为 可重复读(repeatable read)
Oracle 数据库仅包含第二种和第四种,默认为读已提交数据(read committed);
在java使用jdbc使用事务操作
1)设置jdbc事务提交为非自动提交
connection.setAutoCommit(false)
2)提交事务
connection.commit()
3)如果同一个事务sql语句出错,回滚事务
connection.rollBack()
把事务的操作,编写在Service。保证同一个事物中使用的必须为同一个连接对象
try{
conn.setAutoCommit(false) // 写在执行Dao方法之前
conn.commit()//提交事务
}catch(SQLException e){
conn.rollBack()
}