事务处理
事务是一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位,是数据库环境中的逻辑单位
事务的开始取决于一个DML语句
事务的结束
1.正常的commit(使数据修改生效)或者rollback(将数据恢复到上一次)
2.自动提交,但是一般情况下要将自动提交进行关闭,效率太低
3.用户关闭会话之后,会自动提交
4.系统崩溃或者断电的时候会回滚事务,也就是将数据恢复到上一个
此时如果需要回滚到某个状态的话使用rollback to sp1;
delete from emp where empno= 1111;
delete from emp where empno = 2222;
savepoint sp1;
delete from emp where empno = 1234;
rollback to sp1;
commit;
事务的四个特性:ACID
原子性:表示不可分割,要么全部成功,要么全部失败
一致性:最终是为了保证数据的一致性,当经过N多次操作之后,数据的状态从一个一致性到另外一个一致性状态,也就是数据不可发生不一致
隔离性:各个事务之间相关不会产生影响,严格的隔离性会呆滞效率降低,在某些情况下为了提高执行效率会降低隔离性的级别
隔离级别:
读未提交:出现脏读、不可重复读(同一个事务,两次查询结果不一样、幻读
读已提交:不可重复读(同一个事务,两次查询结果不一样)、幻读
可重复读:幻读
序列化:不会产生上面的情况
set globle transaction isolation level 设置事务等级 globle全局
持久性:所有数据的修改都必须要持久化到介质中,不会因为应用程序的关闭而导致数据丢失
四个特性中,哪个是最关键的?
所有事务中都是为了保证数据的一致性,所以一致性是最终的追求,事务中的一致性是通过原子性、隔离性、持久性来保证的
锁的机制:
为了解决再并发访问的时候,数据不一致的问题,需要给数据加锁
加锁对的同时需要考虑《粒度》的问题:
操作的对象
数据库
表
行
一般情况下,锁的粒度越小,效率越高,粒度越大,效率越低
在实际的工作环境中,大部分都是锁行