《快速掌握oracle数据库基础知识.ppt》由会员分享,可在线阅读,更多相关《快速掌握oracle数据库基础知识.ppt(51页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Oracle基础基础主要内容主要内容ORACLE体系结构1数据库对象2事务和锁3ORACLEORACLE体系结构体系结构 Oracle简称甲骨文,是仅次于微软公司的世界第二大软件公司,公司成立于9年,是加利福尼亚州的第一家在世界上推出以关系型数据管理系统(RDBMS)为中心的一家软件公司。Oracle不仅在全球最先推出了RDBMS,并且事实上掌握着这个市场的大部分份额。他们的RDBMS被广泛应用于各种操作环境:Windows NT、基于UNIX系统的小型机、IBM大型机以及一些专用硬件操作系统平台。Oracle数据库管理系统是一个以关系型和面向对象为中心管理数据的数据库管理软件系统,其在管理信
2、息系统、企业数据处理、因特网及电子商务等领域有着非常广泛的应用。因其在数据安全性与数据完整性控制方面的优越性能,以及跨操作系统、跨硬件平台的数据互操作能力,使得越来越多的用户将Oracle作为其应用数据的处理系统。Oracle数据库是基于“客户端服务器”(Client/Server)模式结构。客户端应用程序执行与用户进行交互的活动。其接收用户信息,并向“服务器端”发送请求。服务器系统负责管理数据信息和各种操作数据的活动。ORACLEORACLE体系结构体系结构Oracle数据数据库有如下几个有如下几个强大的特性:大的特性:支持多用户、大事务量的事务处理数据安全性和完整性的有效控制支持分布式数据
3、处理可移植性很可移植性很强Oracle大体上分两大块,一块是应用开发,一块是系统管理。开发主要是写写存储过程、触发器什么的,还有就是用Oracle的Develop工具做form。有点类似于程序员,需要有较强的逻辑思维和创造能力。管理则需要对Oracle数据库的原理有深刻的认识,有全局操纵的能力和紧密的思维,责任较大,因为一个小的失误就会丢失整个数据库,相对前者来说,后者更看重经验。Oracle Server通常所说的oracle主要是指Oracle Server 即oracle数据库服务器。Oracle Server主要是由实例(instance)和数据库(database)两部组成.一般来说
4、一个实例只能加载一个数据库,在特殊情况下,比如RAC环境,一个库可以有多个例程访问。实例:一组内存结构(SGA)和后台进程的集合。数据库:一组数据文件的集合。主要由数据文件,控制文件和重做日志文件.ORACLEORACLE体系体系结构构口令文件口令文件实例例SGA日志日志缓冲区冲区共享共享缓冲区冲区数据字典数据字典库缓冲区冲区DBWRSMONPMONCKPTLGWROthers用用户进程程服服务器器进程程PGA控制文件控制文件数据文件数据文件数据数据库数据数据缓冲区冲区重做日志重做日志文件文件Java池池其他其他参数文件参数文件归档日志文件档日志文件ORACLEORACLE体系体系结构构1.实
5、例是一组内存结构(SGA)和后台进程的集合.2.一个实例只能打开一个库.后台后台进程程结构构内存内存结构构实例例SGA重做日志重做日志缓冲区冲区共享共享缓冲区冲区数据字典数据字典缓冲区冲区库缓冲区冲区DBWRSMONPMONCKPTLGWROthers数据数据缓冲区冲区Java池池Large池池ORACLEORACLE体系体系结构构ORACLEORACLE的的实例例1.建立一个用户连接2.创建一个会话3.连接方式。(jdbc,sqlplus)会会话创建建数据数据库用用户用用户进程程服服务器器进程程连接建立接建立Oracle 服服务器器ORACLEORACLE体系体系结构构连接接ORACLE S
6、ERVERORACLE SERVERORACLEORACLE体系体系结构构p数据库物理结构 数据库在物理上结构主要由数据文件(dbf),控制文件(ctl),重做日志文件(log)组成。口令文件口令文件参数文件参数文件归档日志文件档日志文件控制文件控制文件数据文件数据文件 重做日重做日志文件志文件Oracle 数据数据库p数据库物理结构1 1、数据文件、数据文件用于存储数据库的数据。包括系统数据,用户数据等。当建库或建表空间时,数据文件是由DATAFILE选项指定的。数据库逻辑上的一个或多个表空间组成,表空间物理上是由一个和多个数据文件组成。数据库表空间数据文件逻辑物理ORACLEORACLE体
7、系体系结构构2 2、重做日志、重做日志用于记录数据库变化,当进行实例恢复或者介质恢复时需要使用重做日志。当进行数据DML,DDL等操作时,事务变化被写到重做日志缓冲区,在特定时刻LGWR进程会将重做日志缓冲区内容写入重做日志。一般情况下,数据库有三个重做日志组。并且循环使用。3 3、控制文件、控制文件用于记录和维护数据库的物理结构,并并且每个数据库至少包含一个控制文件。Oracle实例访问数据库正是通过控制文件建立关联的,oracle实例会根据控制文件记录的信息打开所有数据文件和重做日志。ORACLEORACLE体系体系结构构p数据库逻辑结构数据库的数据物理上存放在数据文件中,而逻辑上则存放在
8、了表空间中,oracle是使用表空间、段,区,数据块等逻辑结构来管理对象空间。关系图:数据库表空间段逻辑区数据块物理数据文件OS块ORACLEORACLE体系体系结构构ORACLEORACLE体系结构体系结构表空间表空间,段段,区区,块的组成层次块的组成层次表空表空间数据文件数据文件段段块区区段段ORACLEORACLE体系结构体系结构q表空间是数据库中最大的逻辑单位,一个 Oracle 数据库至少包含一个表空间,就是名为SYSTEM的系统表空间。q每个表空间是由一个或多个数据文件组成的,一个数据文件只能与一个表空间相关联。q表空间的大小等于构成该表空间的所有数据文件大小之和。CREATE T
9、ABLESPACE tablespacenameDATAFILE filename SIZE integer K|M AUTOEXTEND OFF|ON;q创建表空间的语法是:ORACLEORACLE体系结构体系结构主要内容主要内容ORACLE体系结构1数据库对象2事务和锁3数据库对象数据库对象2022/11/25q模式是对用户所创建的数据库对象(模式对象)的总称 q通常一个模式对应一个用户。q主要介绍数据库对象u用户u表u视图u物化视图u索引u序列u同义词u触发器用户和权限用户和权限Oracle使用角色的方法来限定各种用户的权力,在系统中可以有许多用户,各种用户有各种不同的角色,拥有不同的权
10、力。实践表明与其很明确的赋一组权限给一个角色,不如赋给一个角色,然后把这个角色赋给一组用户。这样就可以实现动态的权限管理,当这组用户的权限必须改变时,只需改变角色的权限就可以了。q要连接到Oracle数据库,就需要创建一个用户帐户q每个用户都有一个默认表空间和一个临时表空间qCREATEUSER命令用于创建新用户CREATE USER usernameIDENTIFIED BY passwordDEFAULT TABLESPACE tablespaceTEMPORARY TABLESPACE tablespace;用户和权限用户和权限q权限指的是执行特定命令或访问数据库对象的权利q权限有两种类
11、型,系统权限和对象权限系统权限允许用户执行某些数据库操作,如创建表就是一个系统权限对象权限允许用户对数据库对象(如表、视图、序列等)执行特定操作q角色是一组相关权限的组合,可以将权限授予角色,再把角色授予用户,以简化权限管理。表表p表的记录(行row)和字段(列column)构成,是数据库中存储数据的结构。要进行数据的存储和管理,首先要在数据库中创建表,即表的字段(列)结构。有了正确的结构,就可以用数据操作命令,插入、删除表中记录或对记录进行修改。p数据完整性约束 表的数据有一定的取值范围和联系,多表之间的数据有时也有一定的参照关系。在创建表和修改表时,可通过定义约束条件来保证数据的完整性和一
12、致性。约束条件是一些规则,在对数据进行插入、删除和修改时要对这些规则进行验证,从而起到约束作用。完整性包括数据完整性和参照完整性,数据完整性定义表数据的约束条件,参照完整性定义数据之间的约束条件。数据完整性由主键(PRIMARY KEY)、非空(NOT NULL)、惟一(UNIQUE)和检查(CHECK)约束条件定义,参照完整性由外键(FOREIGN KEY)约束条件定义。表表p创建表的语法表的创建需要CREATE TABLE 系统权限,表的基本创建语法如下:CREATE TABLE 表名(列名 数据类型(宽度)DEFAULT 表达式COLUMN CONSTRAINT,.TABLE CONST
13、RAINTTABLE_PARTITION_CLAUSE);通过子查询创建表如果要创建一个同已有的表结构相同或部分相同的表,可以采用以下的语法:CREATE TABLE 表名(列名.)AS SQL 查询语句;表表p修改表结构增加增加新列新列增加新列的语法如下:ALTER TABLE 表名ADD 列名数据类型DEFAULT 表达式COLUMN CONSTRAINT;如果要为表同时增加多列,可以按以下格式进行:ALTER TABLE 表名ADD(列名 数据类型DEFAULT 表达式COLUMN CONSTRAINT.);表表修改修改列列修改列的语法如下:ALTER TABLE 表名MODIFY 列名
14、 数据类型 DEFAULT 表达式COLUMN CONSTRAINT如果要对表同时修改多列,可以按以下格式进行:ALTER TABLE 表名MODIFY(列名 数据类型DEFAULT 表达式COLUMN CONSTRAINT.);其中,列名是要修改的列的标识,不能修改。如果要改变列名,只能先删除该列,然后重新增加。其他部分都可以进行修改,如果没有给出新的定义,表示该部分属性不变。表表删除除列列删除列的语法如下:ALTERTABLE表名DROPCOLUMN列名CASCADECONSTRAINTS;如果要同时删除多列,可以按以下格式进行:ALTERTABLE表名DROP(COLUMN列名数据类型D
15、EFAULT表达式COLUMNCONSTRAINT.)CASCADECONSTRAINTS;当删除列时,列上的索引和约束条件同时被删除。但如果列是多列约束的一部分,则必须指定CASCADECONSTRAINTS才能删除约束条件。表表p分区表 在某些场合会使用非常大的表,比如人口信息统计表。如果一个表很大,就会降低查询的速度,并增加管理的难度。一旦发生磁盘损坏,可能整个表的数据就会丢失,恢复比较困难。根据这一情况,可以创建分区表,把一个大表分成几个区(小段),对数据的操作和管理都可以针对分区进行,这样就可以提高数据库的运行效率。分区可以存在于不同的表空间上,提高了数据的可用性。表表p表分区的依据
16、 分区的依据可以是一列或多列的值,这一列或多列称为分区关键字或分区列。所有分区的逻辑属性是一样的(列名、数据类型、约束条件等),但每个分区可以有自己的物理属性(表空间、存储参数等)。分区有三种:范围分区、哈希分区和列表分区。范围分区(RANGE PARTITIONING):根据分区关键字值的范围建立分区。比如,根据省份为人口数据表建立分区。哈希分区(HASH PARTITIONING):在分区列上使用HASH 算法进行分区。列表分区(List PARTITIONING):根据预先定义好的分区键数值确定记录被分配到哪个分区。视图视图p视图的概念 视图是基于一张表或多张表或另外一个视图的逻辑表。视
17、图不同于表,视图本身不包含任何数据。表是实际独立存在的实体,是用于存储数据的基本结构。而视图只是一种定义,对应一个查询语句。视图的数据都来自于某些表,这些表被称为基表。通过视图来查看表,就像是从不同的角度来观察一个(或多个)表。视图有如下一些优点:视图有如下一些优点:*可以提高数据访问的安全性,通过视图往往只可以访问数据库中表的特定部分,限制了用户访问表的全部行和列。*简化了对数据的查询,隐藏了查询的复杂性。视图的数据来自一个复杂的查询,用户对视图的检索却很简单。视图视图*一个视图可以检索多张表的数据,因此用户通过访问一个视图,可完成对多个表的访问。*视图是相同数据的不同表示,通过为不同的用户
18、创建同一个表的不同视图,使用户可分别访问同一个表的不同部分。视图可以在表能够使用的任何地方使用,但在对视图的操作上同表相比有些限制,特别是插入和修改操作。对视图的操作将传递到基表,所以在表上定义的约束条件和触发器在视图上将同样起作用。视图视图p视图的创建创建视图需要CREAE VIEW系统权限,视图的创建语法如下:CREATE OR REPLACE FORCE|NOFORCE VIEW 视图名(别名1,别名2.)AS 子查询WITH CHECK OPTION CONSTRAINT 约束名WITH READ ONLY其中:OR REPLACE 表示替代已经存在的视图。FORCE表示不管基表是否存
19、在,创建视图。NOFORCE表示只有基表存在时,才创建视图,是默认值。视图的的查看看USER_VIEWS字典中包含了视图的定义。物化视图物化视图p 物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有实质上的好处。物化物化视图的类型视图的类型ON DEMAND、ON COMMIT。二者的区别在于刷新方法的不同,ON DEMAND顾名思义,仅在该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表
20、数据的一致性;而ON COMMIT是说,一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。物化视图可以分为以下三种类型:包含聚集的物化视图;只包含连接的物化视图;嵌套物化视图。三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大。物化视图物化视图p创建物化视图时可以指定多种选项 创建方式(Build Methods):包括BUILD IMMEDIATE和BUILD DEFERRED两种。BUILD IMMEDIATE是在创建物化视图的时候就生成数据,而BUILD DEFERRED则在创建时不生成数据,以后根据需要在生成数据。默认为BUILD
21、 IMMEDIATE。查询重写(Query Rewrite):包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE两种。分别指出创建的物化视图是否支持查询重写。查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的物化视图中读取数据。默认为DISABLE QUERY REWRITE。在建立物化视图的时候可以指定ORDER BY语句,使生成的数据按照一定的顺序进行保存。不过这个语句不会写入物化视图的定义中,而且对以后的刷新也无效。物化视图物化视图p物化视图和普通视图
22、的区别普通视图不存放数据,物化视图存放数据在使用视图进行查询时,是通过View中的SQL查询原表的数据,不能提高查询性能。在通过物化视图进行查询时,直接读取物化视图的数据,提高查询性能。对普通视图应用更新、删除操作会影响原表的数据。只读物化视图不能进行DML操作。可更新物化视图可进行DML操作,并且在刷新时操作会被推送回原表。可写物化视图可进行DML操作,但刷新后所有修改操作在刷新后全部丢失索引索引pOracleOracle数据库的数据库的索引索引 索引(INDEX)是为了加快数据的查找而创建的数据库对象,特别是对大表,索引可以有效地提高查找速度,也可以保证数据的惟一性。q索引是对数据库表中一
23、列或多列的值进行排序的一种结构使用索引可快速访问数据库表中的特定信息。q索引不论逻辑上和物理上都与相关的表的数据无关,索引需要独立的存储空间,所以索引在创建之初就需要设置对应的表空间 在创建PRIMARY KEY和UNIQUE 约束条件时,系统将自动为相应的列创建惟一(UNIQUE)索引。索引的名字同约束的名字一致。索引索引索引索引的的创建建创建索引不需要特定的系统权限。建立索引的语法如下:CREATE UNIQUE|BITMAP INDEX 索引名ON 表名(列名1,列名2,.);其中:UNIQUE 代表创建惟一索引,不指明为创建非惟一索引。BITMAP 代表创建位图索引,如果不指明该参数,
24、则创建B*树索引。列名是创建索引的关键字列,可以是一列或多列。删除索引的语法是:DROP INDEX 索引名;索引索引 索引有各种类型,除了标准索引外,还有一些特殊类型的索引有各种类型,除了标准索引外,还有一些特殊类型的索引的类型基于函数的索引反向键索引位图索引唯一索引组合索引索引索引q 唯一索引1、何时创建:当某列任意两行的值都不相同2、当建立Primary Key(主键)或者Unique constraint(唯一约束)时,唯一索引将被自动建立3、语法:CREATE UNIQUE INDEX index ON table(column);q组合索引1、何时创建:当两个或多个列经常一起出现在
25、where条件中时,则在这些列上同时创建组合索引2、组合索引中列的顺序是任意的,也无需相邻。但是建议将最频繁访问的列放在列表的最前面3、语法:CREATE INDEX index ON table(column1,column2);索引索引q位图索引1、何时创建:列中有非常多的重复的值时候。例如某列保存了“性别”信息。Where 条件中包含了很多OR操作符。较少的update操作,因为要相应的更新所有的bitmap2、结构:位图索引使用位图作为键值,对于表中的每一数据行位图包含了TRUE(1)、FALSE(0)、或NULL值。3、优点:位图以一种压缩格式存放,因此占用的磁盘空间比标准索引要小得
26、多4、语法:CREATE BITMAP INDEX index ON table(column,column.);5、例子:create table bitmaptable as select*from indextable where owner in(SYS,PUBLIC);索引索引q分区索引 分区索引就是简单地把一个索引分成多个片断。通过把一个索引分成多个片断,可以访问更小的片断(也更快),并且可以把这些片断分别存放在不同的磁盘驱动器上(避免I/O问题)。创建分区索引的方法:createindexIDX_PART_RANGE_IDONT_PARTITION_RANGE(id)local(
27、partitioni_range_p1tablespacetbspart01,partitioni_range_p2tablespacetbspart01,partitioni_range_p3tablespacetbspart02,partitioni_range_pmaxtablespacetbspart02);序列序列序列是用于生成唯一、连续序号的对象序列可以是升序的,也可以是降序的使用CREATE SEQUENCE语句创建序列SQLCREATESEQUENCEseq_toysSTARTWITH10INCREMENTBY10MAXVALUE2000MINVALUE10NOCYCLECAC
28、HE10;指定第一个序号从10开始指定序号之间的间隔为10表示序列的最大值为2000表示序列的最小值为10在达到最大值后停止生成下一个值指定内存中预先分配的序号数序列序列创建和删除序列SQLALTERSEQUENCEseq_toysMAXVALUE5000CYCLE;使用ALTERSEQUENCE语句修改序列,不能更改序列的STARTWITH参数使用DROPSEQUENCE语句删除序列SQLDROPSEQUENCEseq_toys;同义词同义词 同义词(SYNONYM)是为模式对象起的别名,可以为表、视图、序列、过程、函数和包等数据库模式对象创建同义词。同义词有两种:公有同义词和私有同义词。公
29、有同义词是对所有用户都可用的。创建公有同义词必须拥有系统权限CREATE PUBLIC SYNONYM;创建私有同义词需要CREATE SYNONYM系统权限。私有同义词只对拥有同义词的账同义词的创建和使用同义词的创建语法如下:CREATEPUBLICSYNONYM同义词名FOR模式名.对象名数据库链路名;其中:PUBLIC代表创建公有同义词,若省略则代表创建私有同义词。模式名代表拥有对象的模式账户名。同义词同义词 数据库链路名是指向远程对象的数据库链接。删除同义词的语法如下DROP SYNONYM 同义词名;删除同义词的人必须是同义词的拥有者或有DROP ANY SYNONYM权限的人。删除
30、同义词不会删除对应的对象。触发器触发器 触发器是特定事件出现的时候,自动执行的代码块。类似于存储过程,触发器与存储过程的区别在于:存储过程是由用户或应用程序显式调用的,而触发器是不能被直接调用的。触发器必须由事件才能触发。触发器的触发事件分可为3类,分别是DML事件、DDL事件和数据库事件。触发器的类型可划分为4 种:数据操纵语言(DML)触发器、替代(INSTEAD OF)触发器、数据定义语言(DDL)触发器和数据库事件触发器。各触发器的作用:主要内容主要内容ORACLE体系结构1数据库对象2事务和锁3数据库事务数据库事务p事务的概念:事务用于保证数据的一致性,它由一组相关的dml语句组成,
31、该组的dml语句要么全部成功。要么全部失败。DML(数据操作语言增删改)事务的特性有四个:ACID原子性原子性atomicityatomicity:语句级原子性,过程级原子性,事务级原子性一致性一致性consistencyconsistency:状态一致,同一事务中不会有两种状态隔离性隔离性isolationisolation:事务间是互相分离的互不影响(这里可能也有自治事务)持久性持久性durabilitydurability:事务提交了,那么状态就是永久的数据库事务数据库事务p 事务事务的优点:的优点:*把逻辑相关的操作分成了一个组。*在数据永久改变前,可以预览数据变化。*能够保证数据的读
32、一致性。COMMIT操作把多个步骤对数据库的修改,一次性地永久写入数据库,代表数据库事务的成功执行。ROLLBACK操作在发生问题时,把对数据库已经作出的修改撤消,回退到修改前的状态。在操作过程中,一旦发生问题,如果还没有提交操作,则随时可以使用ROLLBACK来撤消前面的操作。SAVEPOINT 则用于在事务中间建立一些保存点,ROLLBACK可以使操作回退到这些点上边,而不必撤销全部的操作。一旦COMMIT完成,就不能用ROLLBACK来取消已经提交的操作。一旦ROLLBACK完成,被撤消的操作要重做,必须重新执行相关操作语句。数据库事务数据库事务p事务和锁 当执行事务操作时(dml语句)
33、,oracle会在被作用的表上加锁,防止其他用户改变表的结构。提交事务 当执使用commit语句可以提交事务.当执行了commit语句之后,会确认事务的变化、结束事务、删除保存点、释放锁,当使用commit语句结束事务之后,其他会话将可以查看到事务变化后的新数据;savepoint savepoint 保存点名称保存点名称;-创建一个保存点rollback to rollback to 保存点名称保存点名称;-回滚到保存点回滚事务 当执行rollback时,通过指定保存点可以回退到指定的点 rollbackrollback -取消全部事务 commit之后不能rollback数据库事务数据库事
34、务p数据库锁Oracle数据数据库中的中的锁机制机制数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改;加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库事务数据库事务OracleOracle数据库数据库锁分类(锁分类(根据保护对象的根据保护对象的不同):不同):(1)DML lo
35、ck(data locks,数据锁):用于保护数据的完整性;(2)DDL lock(dictionary locks,字典锁):用于保护数据库对象的结构(例如表、视图、索引的结构定义);(3)Internal locks和latches(内部锁与闩):保护内部数据库结构;(4)Distributed locks(分布式锁):用于OPS(并行服务器)中;(5)PCM locks(并行高速缓存管理锁):用于OPS(并行服务器)中。在Oracle中最主要的锁是DML(也可称为data locks,数据锁)锁。DML锁的目的在于保证并发情况下的数据完整性。在Oracle数据库中,DML锁主要包括TM锁
36、和TX锁,其中TM锁称为表级锁,TX锁称为事务锁或行级锁。数据库事务数据库事务锁出现在数据共享的场合,用来保证数据的一致性。当多个会话同时修改一个表时,需要对数据进行相应的锁定。锁有“只读锁”、“排它锁”,“共享排它锁”等多种类型,而且每种类型又有“行级锁”(一次锁住一条记录),“页级锁”(一次锁住一页,即数据库中存储记录的最小可分配单元),“表级锁”(锁住整个表)。若为“行级排它锁”,则除被锁住的行外,该表中其他行均可被其他的用户进行修改(Update)或删除(delete)。若为“表级排它锁”,则所有其他用户只能对该表进行查询(select)操作,而无法对其中的任何记录进行修改或删除。当程序对所做的修改进行提交(commit)或回滚(rollback)后,锁住的资源便会得到释放,从而允许其他用户进行操作。如果两个事务,分别锁定一部分数据,而都在等待对方释放锁才能完成事务操作,这种情况下就会发生死锁。谢谢观看!谢谢观看!