数据库事务处理

什么是事务

事务的定义是一个独立的逻辑工作单元。由必须作为一个整体的SQL语句集合组成,要么一起成功要么一起失败。举个常见的例子银行转账。例如,一个客户小S给大S转账50000人民币,首先要把小S账户减掉50000人民币,再把大S账户添加50000人民币。这就需要两个更新成功才能完成。为了保证数据的正确性。必须两个都成功,或者都失败,如果更新都没成功,则需要回滚。如果是一小S的账户更新成功,而大S的账户没有更新成功。则数据就没有一致性了。

事务的ACID属性

事务的ACID是个属性分别是:原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability).

原子性是指事务必须要么同事执行成功,要么同时执行失败。

一致性是指事务从一个一致性状态到另一个一致性状态。(可以用能量守恒定律来说,就是小S少50000,别人肯定会多50000)

隔离性是指一个事务带来的影响未提交之前,对别的事务都是不可见的。不过事务隔离性有隔离级别一说。

持久性是指经过提交的事务永久性生效。

事务隔离级别


隔离级别       脏读         不可重复读      幻读

未提交读       是                  是                   是

提交读           否                  是                   是

可重复读       否                  否                   是

序列化           否                  否                  否


脏读是指 一个事务对数据库做了修改,但未提交。其他事务可以读到数据的变化。但是A事务有可能永远不提交。所以其他事务读取的数据就是脏数据。

不可重复读是指第一个事务对数据做了读取,后面进入第二个事务对数据做了修改。而第一个事务第二次执行同样的查询时得到的数据不一样了,这就是不可重复读。

幻读是指一个事务一个查询第二次执行,但返回了满足条件的过滤标准的记录。就是幻读。

说白了,未提交读是指事务除去不可同时写,能够随便读,是事务的修改对别人是可见的。提交读是指 只能读到提交之后的数据,也就是事务的修改对别人是不可见的。可重复读是指事务查询的数据,不让别人做修改,从而保证在同一事务下得到的相同数据不会改变。为什么是相同数据呢?因为还有幻读的可能,数据库还是可以做插入操作的。序列化就是不让别的事务对同一数据集合的所在表做任何DML操作。

根据个人理解,如有不当望多多指教!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值