Oracle数据库-事务和锁
问答题
1、什么是事务?简述事务的基本特征。
数据库事务是指一个对数据库读写的操作序列,这个操作只有两种状态,执行或不执行,
不存在执行其中的部分后停止,如果一个操作序列具有这样的性质,我们称这个操作序列为事务 。
四个特性:ACID 原子性(atomicity):事务必须以一个整体单元的形式工作,对于数据的修改要么全部执行,要么全部不执行;
一致性(consistency):事务在完成时,必须使所有的数据都保持一致状态。比如a+b=10,当a改变时,b也将改变;a+b=10不变。
隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability):事务完成后,对系统的影响是永久的,即便之后机器重启,断电,数据也将一致保持
2、COMMIT语句和ROLLBACK语句各有何功能
commit是提交事务,即提交某个事务的所有操作
rollback是回滚事务,即撤销某个事务中的已执行的操作
3、保存点的作用是什么?怎样设置?
保存点(SAVEPOINT)是事务处理过程中的一个标志,与回滚命令(ROLLBACK)结合使用。
作用:保存点可以回退到事务的一部分,我们在操作数据库的过程中可以对事务分隔为几个部分,
在操作失误的时候就可以回滚到某个点即可。
在事务中任何地方都可以设置保存点,设置保存点使用savepoint实现
-- 创建保存点
savepoint updateAdmin;
-- DML(Data Manipulation Language-数据库操纵语言) 语句
update user_info set pswd=12341 where user_id='admin';
-- 回滚到保存点之前的状况
select * from user_info;
-- 回滚到保存点
rollback to savepoint updateAdmin;
-- 回滚到保存点的状况
select * from user_info;
-- 总是提交与其最近的保存点
commit work;
4、什么是并发事务?什么是锁机制?
Oracle数据库支持多个用户同时对数据库进行并发访问,每个用户都可以同时运用自己的事务,这种事务称为并发事务。
在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库利用这两种基本的锁类型来对数据库的事务进行并发控制。
5、什么是死锁?怎样防止死锁?
当两个事务并发执行时,各对一个资源加锁,并等待对方释放资源又不释放自己加锁的资源,这样就会造成死锁。
防止死锁的发生是解决死锁最好的方式,用户需要遵循如下原则
(1)尽量避免并发的执行修改数据的语句。
(2)要求每个事务一次就将所有要使用的数据全部枷锁,否则就不予执行。
(3)预先规定一个枷锁顺序,所有的事务都按该顺序对数据进行加锁。
(4)每个事务的执行时间不可太长,尽量缩短事务的逻辑处理过程,及早地提交或回滚事务。
(5)一般不建议强行加锁。