事务与死锁

**

事务

**
事务是针对于数据更新使用的,只有DML的更新操作才能存在事务处理

session 会话,以此概念表示唯一的一个用户,在oracle中每一个登录到数据库的用户,都会自动分配一个session

session 会话,以此概念表示唯一的一个用户,在oracle中每一个登录到数据库的用户,都会自动分配一个session

commit:事务提交。 执行更新操作后,只有执行了commit,更新才会真正发出,没有执行commit之前,所有的更新操作都会保存在缓冲区中,事务提交之后,缓冲区内的数据被销毁

rollback:事务回滚。如果发现操作有问题,恢复所有的更新操作,保证原始数据不被破坏。如果事务commit之后,rollback将不再发挥作用

保存点概念(savepoint):
在未提交之前我们可以进行回滚操作,回到上一次提交的时候,但是有的时候如果不希望回滚到上一次提交的时候,而是回滚到上次提交之后的某一段时间,这样就需要保存点来完成。
既将一段事务分成n小段事务,用户可以回退到创建的某一个保存点上。在做一段事务之前最好多做一些保存点,以防不必要的数据丢失;
我们可以在操作的时候创建一个保存点

savepoint a1;

可以在未提交之前创建多个保存点,用户可以回退到任何一个保存点:

rollback to a1;

但是,如果执行了commit操作,那么之前所做的所有保存点不在存在;
**
只读事务:
如果管理员想查看某个时间段之前的信息,这种情况不能被这个时间段之后产生的数据影响,这就需要只读事务来处理:
设置只读事务:set transaction read only
然后再去查看表,这个时候在设置只读事务之后产出的数据就查不到了(针对所有变,既设置了只读事务之后,改用户的所有表之后产生的数据都不会被查询到)

死锁

**
在任何情况下,只要是不同的用户进行同一条记录更新的时候,一定是互相等待的结果
当用户1执行update emp set sal = 3000 where empno = 1时,如果不执行事务操作(commit,rollback),然后紧接着用户2执行update emp set comm = 3000 where empno = 1 ,用户2则会出现等待,会在用户1对该数据进行事务操作完后,用户2才会执行。(针对于同一表中的同一条记录)

猜你喜欢

转载自blog.csdn.net/enbaoIT/article/details/87949806