什么是事务?
同一连接下,执行多条修改数据库的sql,要么都成功,如果有一条无法执行,如果有一条无法执行那么执行的其他sql 要进行回滚
事务的特性:
- 原子性:要成功就都成功,失败都失败,整个业务不可分割,作为一个整体执行
- 隔离性:多个连接之间,操作同一数据表,他们之间的数据互不影响, 隔离级别: spring mvc 后边有讲
- 持久性:数据通过事务提交到数据库,之后数据库如果发生故障,崩溃,系统死机, 之后程序恢复后,程序不丢失
- 一致性:举例:转账的例子,同一个表中,用户转账,金额一致,总数不变,不可能多出来,或者减少金额,保持总数一致,
多个连接事务之间的数据影响的现象:
-
脏读:脏数据
一个事务发生修改,还未提交,另外一个事务可以看到该未提交的事务,这是读取的数据就是脏读;现实默认不会发生. -
不可重复读:
一个事务
-
幻读:
事务隔离级别
一般数据库都有自己默认的隔离级别不需要自己手动设置
未提交读:
允许能读到 未提交事务的数据
提交读:
允许能读到提交事务的数据, 能狗解决脏读
重复度:
可以解决 同一事物 多次执行同一sql 得到结果一致的问题,但是不能解决幻读
序列化
多有执行的事务要排队,可以解决脏读,不可重复读,幻读
oracle 开启/关闭事务
标记点::
传播行为: