数据库操作语句的分类
DDL:数据库模式定义语言,关键字:create
DML:数据操纵语言,关键字:Insert、delete、update
DCL:数据库控制语言 ,关键字:grant、remove
DQL:数据库查询语言,关键字:select
oracle中的锁机制。
概念:数据库是多用户同时使用的资源 多个线程访问的情况下 需要根据分析试剂情况进行加锁。
悲观锁 乐观锁只是概念。
悲观锁即为独占锁,A线程操作a表a1数据,其他线程需等待A的事务提交后才能操作a1数据。
第一步:通过管理员权限用户查询被锁表信息
如果怀疑表被锁了,或者事务未被正常关闭,在Oracle数据库中我们可以通过以下语句进行查询获取相关信息:
select t2.username,
t2.sid,
t2.serial#,
t3.object_name,
t2.OSUSER,
t2.MACHINE,
t2.PROGRAM,
t2.LOGON_TIME,
t2.COMMAND,
t2.LOCKWAIT,
t2.SADDR,
t2.PADDR,
t2.TADDR,
t2.SQL_ADDRESS,
t1.LOCKED_MODE
from v$locked_object t1, v$session t2, dba_objects t3
where t1.session_id = t2.sid
and t1.object_id = t3.object_id
order by t2.logon_time;
eg: 表锁和行锁的例子
表锁:
线程1:select * from user for update;
线程2:update user set name=’123’ 堵塞
update user set name=’123’ where id = 1 堵塞
user表被锁定,其他进程无法修改表中数据,只能查询。
行锁:
线程1:select * from user where id = 1 for update;
线程2:update user set name=’123’ 堵塞
update user set name=’123’ where id = 1 堵塞
update user set name=’123’ where id = 2 正常
user表中id=1数据被锁定,其他进程无法修改user该条数据。
锁的模式
v$locked_object中的LOCKED_MODE字段表示锁的模式,oracle中锁的模式有如下几种:
0:none
1:null 空
2:Row-S 行共享(RS):共享表锁,sub share
3:Row-X 行独占(RX):用于行的修改,sub exclusive
4:Share 共享锁(S):阻止其他DML操作,share
5:S/Row-X 共享行独占(SRX):阻止其他事务操作,share/sub exclusive
6:exclusive 独占(X):独立访问使用,exclusive