数据库的事务

数据库事务的特性:

    原子性:事务中的操作作为一个原子,不可分割,事物的执行要么都成功,要么都失败。

    一致性:事务中的操作要保持一致。比如转账操作,要保障金额总数的不变。

   隔离性:不同的事务执行是相互独立的,互不影响。

   持久性:事务一旦提交就会保存到数据库中,不会断电丢失。

由于事务产出的问题(多线程下存在的问题):

    脏读(dirty read):如果一个事务正在执行写操作,此时事务并未提交,这时候就会发生又来个一个事务进行读操作,此时,读到了未提交的数据,这种情况脏读,如果写操作的事务正常提交没事,但是如果写操作的书屋发生回滚,就会出现错误。

    不可重复读(UNrepeatable read):如果一个事务对数据在进行了两次读操作,在第一次读取后,另外一个事务对这个数据进行了更改操作,然后第一个事务对这数据进行第二次读取,就会导致两次的读取结果不一致这种情况叫做不可重复读。

    幻读(phantom read):如果一个事务对数据进行查询操作,在第一次读取后,有一个事务对数据进行增删,然后第一个事务对这些数据进行第二次读取,会发现两次读取的数据的条数不一致,就是发生了幻读。

事务的隔离级别:

      读未提交(read uncommitted):脏读、不可重复度、幻读都会产生,隔离级别最低,没人用。

      读提交(read committed):运用快照技术,只读提交事务以后的数据,可以避免脏读,别的不行。Oracle的默认事务类型。

      可重复读(repeatable read):给要操作的事务添加了锁,在对这条数据进行事务进行操作的时候,对这条数据添加写锁,不允许别的事务对这条数据进行更新操作,可以避免脏读、不可重复读,不能避免幻读。mysql的Innodb默认的事务类型,一锁锁一行。(2020.5.14之前理解)

        可重复读(repeatable read):基于MVCC(多版本并发控制),给每一个字段加一个版本号,在事务多次查询的时候加上这这个版本号,用来保持一致性。

      序列化(Serializable):事务排队进行,可以避免脏读、不可重复读、幻读。但是因为效率太低,基本没人用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值