Mysql学习笔记(十一)
- 事务保存点savepoint
当一个操作集合中包含多条sql,但只想让其中某部分执行成功,某部分执行失败,此时可以使用保存点。 delete from emp where empno =1111; delete from emp where empno=2222; savepoint savepoint1; delete from emp where empno = 1234; rollback to savepoint1;//只执行前两个删除,savepoint1之前的语句全部执行,savepoint1之后的语句视为无效。 commit;//提交第三个删除。江回滚后的事务提交,并删除所有保存点。
- 事务的ACID属性:
1.原子性(atomicity) 一个完整事务要么完整执行,要么干脆不执行。这意味着工作单元中的每项任务都必须正确执行。任一任务失败,整个事务终止。 2.一致性(consistency) 一致性代表了底层数据的完整性。由事务系统和应用开发人员共同来保证。经过N多个操作后,数据的状态不会改变。 3.隔离性(isolation):各个事务之间互不影响 隔离性意味着事务必须在不干扰其他进程或事务的前提下独立执行。在事务或工作单元执行完毕之前,其所访问的数据不能受系统其他部分的影响。(隔离级别) 4.持久性(durability) 持久性表示在某个事务的执行过程中,对数据所作的修改都必须在事务成功结束前保存至某种物理存储设备。保证所作的任何修改在系统关闭时不丢失。
- 严格的隔离性会导致效率降低,有时候为了提高效率,可降低隔离等级。
- 隔离级别:读未提交,读已提交,可重复读,序列化。
- 数据不一致:脏读,不可重复读,幻读。
- 四个特性中,哪个时最关键的?
所有的特性都是为了保证数据的一致性。一致性时最终的追求。事务中的一致性是通过原子性、隔离性、持久性来保证的。 - 提交或回滚前数据的状态:
以前的数据可恢复
当前用户可以看到DML操作的结果
其他用户不能看到DML操作的结果
被操作的数据被锁住,其他用户不能修改这些数据 - 提交后数据的状态:
数据的修改被永久写在数据库中。
数据以前的状态永久性丢失。
所有的用户都能看到操作后的结果。
记录锁被释放,其他用户可操作这些数据。 - 回滚后数据的状态:
语句将放弃所有的数据修改。
修改的数据被回退。
恢复数据以前的状态。
行级锁被释放。 - 锁的机制:
为了解决在并发访问的时候数据不一致的问题,需要给数据加锁。加锁的同时需要考虑《粒度》的问题:操作的对象:数据库,表,行。一般情况下,锁的粒度越小,效率越高,粒度越大,效率越低。