1 数据库事务
数据库事务就是一系列操作序列的集合,这些集合要么同时成功,要么同时失败
2 Oracle中的事务
2.1 手动提交事务
Oracle数据库中,增删改查语句就是事务的开始,没有特有的事务开始指令(mysql中开始事务的指令是begin)
commit指令用来提交
rollback指令用来回滚
以上操作完成就是一次事务的结束.
2.2 自动提交事务
当指定DDL语句时,事务自动提交.
用户关闭一次会话的时候会自动提交
系统崩溃或者断电时,会自动回滚事务.
2.3 savepoint
当一个操作序列中有很多条sql语句,但是只想让其中某些部分成功,某部分失败,此时可以使用savepoint.
此时就可以做到
3 事务的ACID属性
- 原子性(Atomicity) :
一个操作序列要么全成功,要么全失败,不可以被分割. - 一致性(Consistency ) :
就是数据底层存储的完成性,要由其他三个属性共同来保证.也就是数据不可以发生错乱.并且一致性是最重要的. - 隔离性(Isolation) :
各个事务之间不会产生影响,隔离性包含了四种隔离级别,严格的隔离级别会导致效率问题,在某些情况下,为了保证效率需要降低隔离级别. - 持久性(Durablity) :
所有数据必须持久化到存储介质中,保证系统在瘫痪后,数据不会丢失.
4 隔离级别
四种隔离级别:(严格程度越来越高)
1,读未提交
2,读已提交
3,可重复读
4,序列化
可能导致的问题:
1,脏读
2,不可重复读
3,幻读
4.1 关闭事务的自动提交
查看自动提交属性状态
select @@autocommit
4.2 设置事务隔离级别
4.3 设置全局事务隔离级别
5 锁机制
为了解决并发访问的时候数据不一致的问题,需要给数据枷锁,加锁的时候就涉及锁的力度问题.
数据库锁的分类
- 1,数据库
- 2,表
- 3,行
不同锁的区别
他们之间的效率是不同的,锁力度越小,效率越高,锁粒度越大,效率越低.
1,库锁:并发访问时候,同一时刻只能有一个请求对数据库进行访问,其他请求都要阻塞.
2,表锁:锁指定的表,其他请求就不能访问该表,但是还可以访问其他的表和行记录
3,行锁:只有锁住的行不可以被其他请求访问,其他行数据都可以进行访问
版权声明:本文为BUDDHA_Hugo原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。