事务处理

事务作为一组不可分割的逻辑单元而被执行,如有必要,它的执行效果是可以被撤销的。事务处理通过提交回滚功能实现。提交和回滚才做确保没能全部完成的操作不会对数据库进行影响。财务转账就是一个好例子。

141618_ZmYV_2971347.png

事务的另一个用途是确保在某个操作所涉及的数据行在你使用的时候不会被其他用户更改。MYSQL在执行每条操作的时候会对那个操作所涉及到的资源进行加锁以避免各语句之间相互干扰。但这仍然不能保证每一个数据操作得到预期效果。虽然对数据库进行CRUD操作的时候线程是阻塞的,但是不能保证多条SQL一起执行的时候,这组SQL所涉及到的所有资源都是线程安全的。

所有事务可事先对这组SQL会涉及到的资源事先加锁。

事务所具有的属性:原子性,稳定性(执行事务前后数据库都是稳定的),隔离性,可靠性。

使用事务会增加新能,内存的开销。要合理利用(我们可以看作每条SQL都是一个事务!因为自动提交)。

默认情况下,MYSQL是自动提交模式(每条语句执行完毕都会把它做出的修改提交到数据库并持久化)。假如需要使用事务,你必须禁止自动提交并告诉SQL何时提交以及回滚操作。

142856_KFya_2971347.png

第一句开启一个事务,关闭自动提交,之后执行操作,但是不持久化。最终 COMMIT 进行持久化,并恢复自动提交。

回滚:

143033_jnnx_2971347.png

使用存档点,可选择退回到固定的点,然后进行持久化。

143523_QFrQ_2971347.png

事务的隔离性

MyISAM 使用了表级锁,当一个用户都某张表进行操作的时候,另一个用户就要等待。

InnoDB进行了优化,某个用户修改了某一行的时候,另一个用户可以对同一张表的另一行进行修改或者查询操作。

144002_dGsx_2971347.png

144012_hMmt_2971347.png

为了结果上述问题,InnoDB 提供了四种隔离级别:

144109_yWmQ_2971347.png

144201_UsHa_2971347.png

设置隔离级别:

144421_F0no_2971347.png

对于不支持事务的数据库来说 ,可以使用锁定表的方式进行操作。

144852_tkkw_2971347.png

144904_u8F0_2971347.png

也可单独锁定读操作或者写操作。

或者使用相对更新也能解决上述问题。

145033_AqMV_2971347.png

 

转载于:https://my.oschina.net/marjeylee/blog/808370

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值