oracle 锁机制

锁:控制共享资源的并发访问机制,防止冲突发生
能保证数据的一致性,完整性,共享性
--锁的分类:
(1)行级锁(排他锁)
oracle数据库中,在使用insert ,update ,delete ,select ...for update的时候,默认已经上锁
(2)表级锁

--演示:开启多个窗口模拟多个用户
--USERA:update dept set dname='DDDDD' WHERE deptno=50;并且未提交或者回滚之前在另外一个窗口中
--使用 USERB:select * from dept for update wait 5;会在5秒钟之后告诉我们资源被占用
USERB:select * from dept for update nowait;--只要得不到资源马上报错

--只有其他用户在进行commit或者rollback的时候才能释放锁,同时释放使用的资源

--表级锁,限制其他用户访问该表
使用命令显示地锁定表,应用表级锁的语法是:
LOCK TABLE <table_name> IN <lock_mode>
MODE [nowait];

--表级锁的模式
--行共享:row share 允许其他用户访问和锁定该表,但是禁止排他锁定这个表
lock table dept in row share mode;
--其他用户能使用行共享锁,但是不能使用排他锁
--lock table dept in exclusive mode;
--其他用户能够更新表中数据
update dept set dname='DDDDD' WHERE deptno=50;
delete from dept where deptno=50;

--行排他:row exclusive 与行共享模式相同,同时禁止其他用户在此表上使用共享锁。
--使用select…for update会在表上自动应用行排他锁
lock table dept in row exclusive mode;
--其他用户不能执行:lock table dept in share mode;
--但是能执行:lock table dept in row share mode;
select * from dept for update nowait;--使用这样的语句,会在表上面应用行排他锁
--其他用户能够更新表中数据
update dept set dname='DDDDD' WHERE deptno=50;
delete from dept where deptno=50;

--共享:share 只允许其他用户查询表中的行,但不允许插入、更新、删除行,
--多个用户可以同时在同一个表上应用此锁
lock table dept in share mode;
--其他用户能执行:lock table dept in share mode;
--其他用户不能去执行:update dept set dname='DDDDD' WHERE deptno=50;
--delete from dept where deptno=50;

--共享行排他:share row exclusive执行比共享锁更多的限制
lock table dept in share row exclusive mode;

--排他:exclusive 对表执行最大限制,
--仅允许其他用户查询该表的行。禁止修改和锁定表
lock table dept in exclusive mode;

--死锁
USERA:lock table scott.emp in share mode;
USERB:lock table scott.emp in share mode;
USERA:update scott.emp set job='CLERK' where empno=7521;
USERB:update scott.emp set ename='Smith' where empno=7369;

你可能感兴趣的:(oracle,update,insert,commit,共享资源)