欢迎来到天天文库
浏览记录
ID:34723779
大小:113.68 KB
页数:16页
时间:2019-03-10
《java中锁的概念及运用》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、一、锁的概念及分类ORACLE数据库是现今数据库领域应用最广泛的,同时它也是一个庞大的系统,全面了解它、玩转它不但需要一定的理论知识,更需要开发经验与工程经验。本人是ORACLE一爱好者,以下是本人对ORACLE锁的一些经验,希望能与大家共同分享。 ORACLE锁具体分为以下几类:1.按用户与系统划分,可以分为自动锁与显示锁 自动锁:当进行一项数据库操作时,缺省情况下,系统自动为此数据库操作获得所有有必要的锁。 显示锁:某些情况下,需要用户显示的锁定数据库操作要用到的数据,才能使数据库操作执行得更好,显示锁是用户为
2、数据库对象设定的。2.按锁级别划分,可分为共享锁、共享更新锁、排它锁 共享锁:共享锁使一个事务对特定数据库资源进行共享访问——另一事务也可对此资源进行访问或获得相同共享锁。共享锁为事务提供高并发性,但如拙劣的事务设计+共享锁容易造成死锁或数据更新丢失。 ―锁定表 ―仅允许其他用户执行查询操作 ―不能插入、更新和删除 ―多个用户可以同时在同一表中放置此锁 ―locktabletable_name ―insharemode[nowait]; ―rollb
3、ack和commit命令释放锁 ―nowait关键字告诉其他用户不用等 共享更新锁 ―锁定要被更新的行 ―允许其他用户同时查询、插入、更新未被锁定的行 ―在SELECT语句中使用“FORUPDATE”子句,可以强制使用共享更新锁 ―允许多个用户同时锁定表的不同行 加锁的两种方法 1locktabletab_nameinshareupdatemode; 2selectcolumn1,c
4、olumn2 fromgoods wheregoods wheregid=1001 forupdateofcolumn1,column2 排它锁:事务设置排它锁后,该事务单独获得此资源,另一事务不能在此事务提交之前获得相同对象的共享锁或排它锁。 ―与其他两种锁相比,排他锁是限制性最强的表锁 ―仅允许其他用户查询数据 ―不允许执行插入、删除和更新操作 ―在同一时间仅允许一位用户在表上放置排他锁
5、 ―共享锁与此相反 locktabletab_nameinexclusivemode; locktable<表名>[<表名>]... insharemode[nowait] locktable<表名>[<表名>]... inexclusivemode[nowait] locktable<表名>[<表名>]... inshareupdatemode[nowait]3.按操作划分,可分为DML锁、DDL锁
6、+DML锁又可以分为,行锁、表锁、死锁 -行锁:当事务执行数据库插入、更新、删除操作时,该事务自动获得操作表中操作行的排它锁。 手动锁定方式:SELECT…FORUPDATE子句 ―在表的一行或多行上放置排他锁 ―用于防止其他用户更新该行 ―可以执行除更新之外的其他操作 ―select*fromgoodswheregid=10
7、01 ―forupdateofgname; ―只有该用户提交事务,其他用户才能够更新gname FORUPDATEWAIT子句 ―Oracle9i中的新增功能 ―防止无限期地等待锁定的行 ―等待间隔必须指定为数值文字 ―等待间隔不能是表达式、赋值变量或PL/SQL
8、 变量 ―select*fromgoodswheregid=1001forupdateofgnamewait3 ―等待用户释放更新锁的时间为3秒,否则超时。 -表级锁:当事务获得行锁后,此事务也将自动获得该行的表锁(共
此文档下载收益归作者所有