1、1. 数据抽象:物理抽象、概念抽象、视图级抽象,内模式、模式、外模式提示:(1). 概念模式:(面向单个顾客) 是数据中所有数据整体逻辑构造描述。它由若干个概念记录类型构成。 (2). 外模式:(面向全局) 是顾客与数据库系统接口,是顾客用到那某些数据描述。它由若干个外部记录类型构成。 (3). 内模式:(面向存储) 是数据库在物理存储方面描述,它定义所有内部记录类型、索引、和文献组织方式,以及数据控制方面细节。模式描述是数据全局逻辑构造,外模式描述是数据局部逻辑构造。相应与同一种模式可以有任意各种外模式。在数据库中提供两级映像功能,即外模式/模式映像和模式/内模式映像。对于没一种外模式,数据
2、库系统均有一种外模式/模式映像它定义了该外模式与模式之间相应关系。这些映像定义普通涉及在各自外模式描述中,当模式变化时,由数据库管理员对各个外模式/模式映像做相应变化,可以使外模式保持不变,从而应用程序不必修改,保证了数据逻辑独立性。数据库中只有一种模式,也只有一种内模式,因此模式/内模式映像是唯一,它定义了数据全局逻辑构造与存储构造之间相应关系。当数据库存储构造变化了,由数据库管理员对模式/内模式映像做相应变化,可以使模式保持不变,从而保证了数据物理独立性。2. SQL语言涉及数据定义、数据操纵(Data Manipulation),数据控制(Data Control)数据定义:Create
3、 Table,Alter Table,Drop Table, Craete/Drop Index等数据操纵:Select ,insert,update,delete,数据控制:grant,revoke3. SQL惯用命令CREATE TABLE Student(ID NUMBER PRIMARY KEY,NAME VARCHAR2(50) NOT NULL);/建表CREATE VIEW view_name ASSelect * FROM Table_name;/建视图Create UNIQUE INDEX index_name ON TableName(col_name);/建索引INSER
4、T INTO tablename column1,column2, values(exp1,exp2,);/插入INSERT INTO Viewname column1,column2, values(exp1,exp2,);/插入视图实际影响表UPDATE tablename SET name=zang 3 condition;/更新数据DELETE FROM Tablename WHERE condition;/删除GRANT (Select,delete,) ON (对象) TO USER_NAME WITH GRANT OPTION;/授权REVOKE (权限表) ON(对象) FRO
5、M USER_NAME WITH REVOKE OPTION /撤权列出工作人员及其领导名字:Select E.NAME, S.NAME FROM EMPLOYEE E SWHERE E.SUPERName=S.Name4. 视图提示:计算机数据库中视图是一种虚拟表,其内容由查询定义。同真实表同样,视图包括一系列带有名称列和行数据。但是,视图并不在数据库中以存储数据值集形式存在。行和列数据来自由定义视图查询所引用表,并且在引用视图时动态生成。从顾客角度来看,一种视图是从一种特定角度来查看数据库中数据。从数据库系统内部来看,一种视图是由SELECT语句构成查询定义虚拟表。从数据库系统内部来看,视
6、图是由一张或多张表中数据构成,从数据库系统外部来看,视图就犹如一张表同样,对表可以进行普通操作都可以应用于视图,例如查询,插入,修改,删除操作等。5. 完整性约束:实体完整性、参照完整性、顾客定义完整性提示:定义:关系完整性是为保证数据库中数据对的性和相容性,对关系模型提出某种约束条件或规则。完整性普通涉及域完整性,实体完整性、参照完整性和顾客定义完整性,其中域完整性,实体完整性和参照完整性,是关系模型必要满足完整性约束条件。(1). 域完整性约束:域完整性是保证数据库字段取值合理性。属性值应是域中值,这是关系模式规定了。除此之外,一种属性能否为NULL,这是由语义决定,也是域完整性约束重要内
7、容。域完整性约束是最简朴、最基本约束。在当今关系DBMS中,普通均有域完整性约束检查功能。涉及检查(CHECK)、默认值(DEFAULT)、不为空(NOT NULL)等。(2). 实体完整性实体完整性是指关系主核心字不能重复也不能取“空值。一种关系相应现实世界中一种实体集。现实世界中实体是可以互相区别、辨认,也即它们应具备某种惟一性标记。在关系模式中,以主核心字作为惟一性标记,而主核心字中属性(称为主属性)不能取空值,否则,表白关系模式中存在着不可标记实体(因空值是“不拟定),这与现实世界实际状况相矛盾,这样实体就不是一种完整实体。按实体完整性规则规定,主属性不得取空值,如主核心字是各种属性组
8、合,则所有主属性均不得取空值。如表11将编号作为主核心字,那么,该列不得有空值,否则无法相应某个详细职工,这样表格不完整,相应关系不符合实体完整性规则约束条件。(3). 参照完整性参照完整性是定义建立关系之间联系主核心字与外部核心字引用约束条件。关系数据库中普通都包括各种存在互相联系关系,关系与关系之间联系是通过公共属性来实现。所谓公共属性,它是一种关系R(称为被参照关系或目的关系)主核心字,同步又是另一关系K(称为参照关系)外部核心字。如果参照关系K中外部核心字取值,要么与被参照关系R中某元组主核心字值相似,要么取空值,那么,在这两个关系间建立关联主核心字和外部核心字引用,符合参照完整性规则
9、规定。如果参照关系K外部核心字也是其主核心字,依照实体完整性规定,主核心字不得取空值,因而,参照关系K外部核心字取值事实上只能取相应被参照关系R中已经存在主核心字值。在学生管理数据库中,如果将选课表作为参照关系,学生表作为被参照关系,以“学号作为两个关系进行关联属性,则“学号”是学生关系主核心字,是选课关系外部核心字。选课关系通过外部核心字“学号参照学生关系。(4). 顾客定义完整性实体完整性和参照完整性合用于任何关系型数据库系统,它重要是针对关系主核心字和外部核心字取值必要有效而做出约束。顾客定义完整性则是依照应用环境规定和实际需要,对某一详细应用所涉及数据提出约束性条件。这一约束机制普通不
10、应由应用程序提供,而应有由关系模型提供定义并检查,顾客定义完整性重要涉及字段有效性约束和记录有效性。6. 第三范式:提示:(1). 第一范式(1NF):在关系模式R中每一种详细关系r中,如果每个属性值都是不可再分最小数据单位,则称R是第一范式关系。例:如职工号,姓名,电话号码构成一种表(一种人也许有一种办公室电话和一种家里电话号码) 规范成为1NF有三种办法: 一是重复存储职工号和姓名。这样,核心字只能是电话号码。 二是职工号为核心字,电话号码分为单位电话和住宅电话两个属性 三是职工号为核心字,但强制每条记录只能有一种电话号码。 以上三个办法,第一种办法最不可取,按实际状况选用后两种状况。 (
11、2). 第二范式(2NF):如果关系模式R(U,F)中所有非主属性都完全依赖于任意一种候选核心字,则称关系R 是属于第二范式。 例:选课关系 SCI(SNO,CNO,GRADE,CREDIT)其中SNO为学号, CNO为课程号,GRADEGE 为成绩,CREDIT 为学分。 由以上条件,核心字为组合核心字(SNO,CNO) 在应用中使用以上关系模式有如下问题: a.数据冗余,假设同一门课由40个学生选修,学分就 重复40次。 b.更新异常,若调节了某课程学分,相应元组CREDIT值都要更新,有也许会浮现同一门课学分不同。 c.插入异常,如筹划开新课,由于没人选修,没有学号核心字,只能等有人选修
12、才干把课程和学分存入。 d.删除异常,若学生已经结业,从当前数据库删除选修记录。某些门课程新生尚未选修,则此门课程及学分记录无法保存。 因素:非核心字属性CREDIT仅函数依赖于CNO,也就是CREDIT某些依赖组合核心字(SNO,CNO)而不是完全依赖。 解决办法:提成两个关系模式 SC1(SNO,CNO,GRADE),C2(CNO,CREDIT)。新关系涉及两个关系模式,它们之间通过SC1中外核心字CNO相联系,需要时再进行自然联接,恢复了本来关系 (3). 第三范式(3NF):如果关系模式R(U,F)中所有非主属性对任何候选核心字都不存在传递信赖,则称关系R是属于第三范式。 例:如S1(
13、SNO,SNAME,DNO,DNAME,LOCATION) 各属性分别代表学号, 姓名,所在系,系名称,系地址。 核心字SNO决定各个属性。由于是单个核心字,没有某些依赖问题,必定是2NF。但这关系必定有大量冗余,关于学生所在几种属性DNO,DNAME,LOCATION将重复存储,插入,删除和修改时也将产生类似以上例状况。 因素:关系中存在传递依赖导致。即SNO - DNO。 而DNO - SNO却不存在,DNO - LOCATION, 因而核心辽 SNO 对 LOCATION 函数决定是通过传递依赖 SNO - LOCATION 实现。也就是说,SNO不直接决定非主属性LOCATION。 解
14、决目地:每个关系模式中不能留有传递依赖。 解决办法:分为两个关系 S(SNO,SNAME,DNO),D(DNO,DNAME,LOCATION) 注意:关系S中不能没有外核心字DNO。否则两个关系之间失去联系。7. ER(实体/联系)模型提示:实体-关系模型是面向现实世界,而不是面向实现办法,它重要是用于描述现实信息世界中数据静态特性,而不涉及数据解决过程。基本概念:实体:现实世界中任何可以互相区别事物。解释:实体可以是人,也可以是物;可以指实际对象,也可以指某些概念。例如,一种职工、一种学生、一门课,学生某些选课。属性:实体(或联系)所具备某方面特性(相称于数据库表字段(列)。例如:学生实体,
15、可由学号、姓名、性别、年龄、系、年级。(9673101,王平,男,22,计算机系,三年级)这些属性组合起来就体现了一种学生状况。(相称于记录,特性为字段)。联系:发生在实体之间具备特定含义相应关系PS:实体、属性普通是名词,联系普通是动词ER图中四个基本成分:1. 矩形框,表达实体2. 菱形框,表达实体之间联系3. 椭圆形框,表达实体或联系属性4. 直线,连接实体、属性、和联系。直线端部标注联系种类(1:1、1:N或M:N) 连个实体(或表)之间联系分为三类:(1). 一对一联系(1:1)如果实体集合A中每一种实体,实体集合B中至少都一种实体与之联系,反之亦然,则称为实体集合A与实体集合B具备
16、一对一联系,记为1:1。例如,一种班级有一种班长。(2). 一对多联系(1:n)如果实体集合A中每一种实体,实体集合B中至少都n(n=0)个实体与之联系,反之,对于实体集合B中每一种实体,实体集合A中至多有一种实体与之联系,则称为实体集合A与实体集合B具备一对多联系,记为1:n。例如,一种班级有各种班干部。(3). 多对多联系(m:n)如果实体集合A中每一种实体,实体集合B中至少有n(n=0)个实体与之联系,反之,对于实体集合B中每一种实体,实体集合A中至少有m(m=0)个实体与之联系,则称为实体集合A与实体集合B具备多对多联系,记为m:n。例如,一种学生可以选修多门课,一门课可以有各种学生选
17、修。8. 索引作用提示:可以运用索引迅速访问数据库表中特定信息。索引是对数据库表中一种或各种列(例如,employee 表姓氏 (lname) 列)值进行排序构造。如果想按特定职工姓来查找她或她,则与在表中搜索所有行相比,索引有助于更快地获取信息。 索引提供指针以指向存储在表中指定列数据值,然后依照指定排序顺序排列这些指针。数据库使用索引方式与使用书目录很相似:通过搜索索引找到特定值,然后跟随指针到达包括该值行。 在数据库关系图中,可觉得选定表创立、编辑或删除索引/键属性页中每个索引类型。当保存附加在此索引上表或包括此表数据库关系图时,索引同步被保存。关于详细信息,请参见创立索引。 普通状况下
18、,只有当经常查询索引列中数据时,才需要在表上创立索引。索引将占用磁盘空间,并且减少添加、删除和更新行速度。但是在多数状况下,索引所带来数据检索速度优势大大超过它局限性之处。然而,如果应用程序非常频繁地更新数据,或磁盘空间有限,那么最佳限制索引数量。 在创立索引前,必要拟定要使用列和要创立索引类型。9. 事务提示:数据库事务(Database Transaction),是指作为单个逻辑工作单元执行一系列操作。事务解决可以保证除非事务性单元内所有操作都成功完毕,否则不会永久更新面向数据资源。通过将一组有关操作组合为一种要么所有成功要么所有失败单元,可以简化错误恢复并使应用程序更加可靠。一种逻辑工作
19、单元要成为事务,必要满足所谓ACID(原子性、一致性、隔离性和持久性)属性。数据库事务ACID特性(1). 原子性(atomic)(atomicity) 事务必要是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。普通,与某个事务关联操作具备共同目的,并且是互相依赖。如果系统只执行这些操作一种子集,则也许会破坏事务总体目的。原子性消除了系统解决操作子集也许性。 (2). 一致性(consistent)(consistency) 事务在完毕时,必要使所有数据都保持一致状态。在有关数据库中,所有规则都必要应用于事务修改,以保持所有数据完整性。事务结束时,所有内部数据构造(如 B 树索引或
20、双向链表)都必要是对的。某些维护一致性责任由应用程序开发人员承担,她们必要保证应用程序已强制所有已知完整性约束。例如,当开发用于转帐应用程序时,应避免在转帐过程中任意移动小数点。 (3). 隔离性(insulation)(isolation) 由并发事务所作修改必要与任何其他并发事务所作修改隔离。事务查看数据时数据所处状态,要么是另一并发事务修改它之前状态,要么是另一事务修改它之后状态,事务不会查看中间状态数据。这称为可串行性,由于它可以重新装载起始数据,并且重播一系列事务,以使数据结束时状态与原始事务执行状态相似。当事务可序列化时将获得最高隔离级别。在此级别上,从一组可并行执行事务获得成果与
21、通过持续运营每个事务所获得成果相似。由于高度隔离会限制可并行执行事务数,因此某些应用程序减少隔离级别以换取更大吞吐量。防止数据丢失 (4). 持久性(Duration)(durability) 事务完毕之后,它对于系统影响是永久性。该修改虽然浮现致命系统故障也将始终保持。10. 数据库中锁提示:在数据库中引入锁因素: 各种顾客同步对数据库并发操作时会带来如下数据不一致问题:(1). 丢失更新:A,B两个顾客读同一数据并进行修改,其中一种顾客修改成果破坏了另一种修改成果,例如订票系统。(2). 脏读:A顾客修改了数据,随后B顾客又读出该数据,但A顾客由于某些因素取消了对数据修改,数据恢复原值,此
22、时B得到数据就与数据库内数据产生了不一致。(3). 不可重复读:A顾客读取数据,随后B顾客读出该数据并修改,此时A顾客再读取数据时发现先后两次值不一致。 并发控制重要办法是封锁,锁就是在一段时间内禁止顾客做某些操作以避免产生数据不一致。在数据库中重要使用两种锁:(1). 共享锁共享 (S) 锁容许并发事务读取 (SELECT) 一种资源。资源上存在共享 (S) 锁时,任何其他事务都不能修改数据。一旦已经读取数据,便及时释放资源上共享 (S) 锁,除非将事务隔离级别设立为可重复读或更高档别,或者在事务生存周期内用锁定提示保存共享 (S) 锁。(2). 排它锁排它 (X) 锁可以防止并发事务对资源
23、进行访问。其他事务不能读取或修改排它 (X) 锁锁定数据。锁粒度锁粒度是被封锁目的大小,封锁粒度小则并发性高,但开销大,封锁粒度大则并发性低但开销小。两段锁合同所谓两段锁合同是指所有事务必要分两个阶段对数据项加锁和解锁: 1. 在对任何数据进行读、写操作之前,一方面要申请并获得对该数据封锁,并且 2. 在释放一种封锁之后,事务不再申请和获得任何其她封锁。 所谓“两段”锁含义是,事务分为两个阶段,第一阶段是获得封锁,也称为扩展阶段。在这阶段,事务可以申请获得任何数据项上任何类型锁,但是不能释放任何锁。第二阶段是释放封锁,也称为收缩阶段。在这阶段,事务可以释放任何数据项上任何类型锁,但是不能再申请
24、任何锁。 例如事务T1遵守两段锁合同,其封锁序列是:(如右) 又如事务T2不遵守两段锁合同,其封锁序列是: Slock A Unlock A Slock B Xlock C Unlock C Unlock B; 可以证明,若并发执行所有事务均遵守两段锁合同,则对这些事务任何并发调度方略都是可串行化。 此外要注意两段锁合同和防止死锁一次封锁法异同之处。一次封锁法规定每个事务必要一次将所有要使用数据所有加锁,否则就不能继续执行,因而一次封锁法遵守两段锁合同;但是两段锁合同并不规定事务必要一次将所有要使用数据所有加锁,因而遵守两段锁合同事务也许发生死锁。11. 死锁及解决提示:所谓死锁: 是指两个或
25、两个以上进程在执行过程中,因争夺资源而导致一种互相等待现象,若无外力作用,它们都将无法推动下去。此时称系统处在死锁状态或系统产生了死锁,这些永远在互相等待进程称为死锁进程。 由于资源占用是互斥,当某个进程提出申请资源后,使得关于进程在无外力协助下,永远分派不到必须资源而无法继续运营,这就产生了一种特殊现象死锁。产生死锁因素1. 竞争资源引起进程死锁当系统中供各种进程共享资源如打印机、公用队列等,其数目局限性以满足诸进程需要时,会引起诸进程对资源竞争而产生死锁。 (1). 可剥夺资源和不可剥夺资源 系统中资源可以分为两类,一类是可剥夺资源,是指某进程在获得此类资源后,该资源可以再被其她进程或系统
26、剥夺。例如,优先权高进程可以剥夺优先权低进程解决机。又如,内存区可由存储器管理程序,把一种进程从一种存储区移到另一种存储区,此即剥夺了该进程本来占有存储区,甚至可将一进程从内存调到外存上,可见,CPU和主存均属于可剥夺性资源。另一类资源是不可剥夺资源,当系统把此类资源分派给某进程后,再不能强行收回,只能在进程用完后自行释放,如磁带机、打印机等。 (2). 竞争不可剥夺资源 在系统中所配备不可剥夺资源,由于它们数量不能满足诸进程运营需要,会使进程在运营过程中,因争夺这些资源而陷于僵局。例如,系统中只有一台打印机R1和一台磁带机R2,可供进程P1和P2共享。假定PI已占用了打印机R1,P2已占用了
27、磁带机R2,若P2继续规定打印机R1,P2将阻塞;P1若又规定磁带机,P1也将阻塞。于是,在P1和P2之间就形成了僵局,两个进程都在等待对方释放自己所需要资源,但是它们又都因不能继续获得自己所需要资源而不能继续推动,从而也不能释放自己所占有资源,以致进入死锁状态。 (3). 竞争暂时资源 上面所说打印机资源属于可顺序重复使用型资源,称为永久资源。尚有一种所谓暂时资源,这是指由一种进程产生,被另一种进程使用,短时间后便无用资源,故也称为消耗性资源,如硬件中断、信号、消息、缓冲区内消息等,它也也许引起死锁。例如,SI,S2,S3是暂时性资源,进程P1产生消息S1,又规定从P3接受消息S3;进程P3
28、产生消息S3,又规定从进程P2处接受消息S2;进程P2产生消息S2,又规定从P1处接受产生消息S1。如果消息通信按如下顺序进行: P1:Relese(S1);Request(S3); P2:Relese(S2);Request(S1); P3:Relese(S3);Request(S2); 并不也许发生死锁。但若改成下述运营顺序: P1:Request(S3);Relese(S1); P2:Request(S1);Relese(S2); P3:Request(S2);Relese(S3); 则也许发生死锁。 2. 进程推动顺序不当引起死锁由于进程在运营中具备异步性特性,这也许使P1和P2两个进
29、程按下述两种顺序向前推动。 (1) 进程推动顺序合法 当进程P1和P2并发执行时,如果按照下述顺序推动:P1:Request(R1); P1:Request(R2); P1:Relese(R1);P1:Relese(R2); P2:Request(R2); P2:Request(R1); P2:Relese(R2);P2:Relese(R1);这两个进程便可顺利完毕,这种不会引起进程死锁推动顺序是合法。 (2) 进程推动顺序非法 若P1保持了资源R1,P2保持了资源R2,系统处在不安全状态,由于这两个进程再向前推动,便也许发生死锁。例如,当P1运营到P1:Request(R2)时,将因R2已被
30、P2占用而阻塞;当P2运营到P2:Request(R1)时,也将因R1已被P1占用而阻塞,于是发生进程死锁。 编辑本段产生死锁必要条件虽然进程在运营过程中,也许发生死锁,但死锁发生也必要具备一定条件,死锁发生必要具备如下四个必要条件:(1)互斥条件:指进程对所分派到资源进行排它性使用,即在一段时间内某资源只由一种进程占用。如果此时尚有其他进程祈求资源,则祈求者只能等待,直至占有资源进程用毕释放。 (2)祈求和保持条件:指进程已经保持至少一种资源,但又提出了新资源祈求,而该资源已被其他进程占有,此时祈求进程阻塞,但又对自己已获得其他资源保持不放。 (3)不剥夺条件:指进程已获得资源,在未使用完之
31、前,不能被剥夺,只能在使用完时由自己释放。 (4)环路等待条件:指在发生死锁时,必然存在一种进程资源环形链,即进程集合P0,P1,P2,Pn中P0正在等待一种P1占用资源;P1正在等待P2占用资源,Pn正在等待已被P0占用资源。 解决死锁基本办法在系统中已经浮现死锁后,应当及时检测到死锁发生,并采用恰当办法来解除死锁。当前解决死锁办法可归结为如下四种: (1) 防止死锁。 这是一种较简朴和直观事先防止办法。办法是通过设立某些限制条件,去破坏产生死锁四个必要条件中一种或者几种,来防止发生死锁。防止死锁是一种较易实现办法,已被广泛使用。但是由于所施加限制条件往往太严格,也许会导致系统资源运用率和系
32、统吞吐量减少。 (2) 避免死锁。 该办法同样是属于事先防止方略,但它并不须事先采用各种限制办法去破坏产生死锁四个必要条件,而是在资源动态分派过程中,用某种办法去防止系统进入不安全状态,从而避免发生死锁。 (3)检测死锁。 这种办法并不须事先采用任何限制性办法,也不必检查系统与否已经进入不安全区,此办法容许系统在运营过程中发生死锁。但可通过系统所设立检测机构,及时地检测出死锁发生,并精准地拟定与死锁关于进程和资源,然后采用恰当办法,从系统中将已发生死锁清除掉。 (4)解除死锁。 这是与检测死锁相配套一种办法。当检测到系统中已发生死锁时,须将进程从死锁状态中解脱出来。惯用实行办法是撤销或挂起某些
33、进程,以便回收某些资源,再将这些资源分派给已处在阻塞状态进程,使之转为就绪状态,以继续运营。死锁检测和解除办法,有也许使系统获得较好资源运用率和吞吐量,但在实现上难度也最大。 解除与防止理解了死锁因素,特别是产生死锁四个必要条件,就可以最大也许地避免、防止和解除死锁。因此,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何拟定资源合理分派算法,避免进程永久占据系统资源。此外,也要防止进程在处在等待状态状况下占用资源,在系统运营过程中,对进程发出每一种系统可以满足资源申请进行动态检查,并依照检查成果决定与否分派资源,若分派后系统也许发生死锁,则不予分派,否则予以分派。因而,对资源分派
34、要予以合理规划。 有序资源分派法这种算法资源按某种规则系统中所有资源统一编号(例如打印机为1、磁带机为2、磁盘为3、等等),申请时必要以上升顺序。系统规定申请进程: 1、对它所必要使用并且属于同一类所有资源,必要一次申请完; 2、在申请不同类资源时,必要按各类设备编号依次申请。例如:进程PA,使用资源顺序是R1,R2; 进程PB,使用资源顺序是R2,R1;若采用动态分派有也许形成环路条件,导致死锁。 采用有序资源分派法:R1编号为1,R2编号为2; PA:申请顺序应是:R1,R2 PB:申请顺序应是:R1,R2 这样就破坏了环路条件,避免了死锁发生。银行算法避免死锁算法中最有代表性算法是Dij
35、kstra E.W 于1968年提出银行家算法: 该算法需要检查申请者对资源最大需求量,如果系统现存各类资源可以满足申请者祈求,就满足申请者祈求。 这样申请者就可不久完毕其计算,然后释放它占用资源,从而保证了系统中所有进程都能完毕,因此可避免死锁发生。 死锁排除办法1、撤除陷于死锁所有进程; 2、逐个撤除陷于死锁进程,直到死锁不存在; 3、从陷于死锁进程中逐个逼迫放弃所占用资源,直至死锁消失。 4、从此外某些进程那里强行剥夺足够数量资源分派给死锁进程,以解除死锁状态。12. 存储过程提示:存储过程(Stored Procedure)是在大型数据库系统中,一组为了完毕特定功能SQL 语句集,经编
36、译后存储在数据库中,顾客通过指定存储过程名字并给出参数(如果该存储过程带有参数)来执行它。存储过程种类1. 系统存储过程以sp_开头,用来进行系统各项设定.获得信息.有关管理工作。 2. 本地存储过程顾客创立存储过程是由顾客创立并完毕某一特定功能存储过程,事实上普通所说存储过程就是指本地存储过程。 3. 暂时存储过程分为两种存储过程: 一是本地暂时存储过程,以井字号(#)作为其名称第一种字符,则该存储过程将成为一种存储在tempdb数据库中本地暂时存储过程,且只有创立它顾客才干执行它;二是全局暂时存储过程,以两个井字号(#)号开始,则该存储过程将成为一种存储在tempdb数据库中全局暂时存储过
37、程,全局暂时存储过程一旦创立,后来连接到服务器任意顾客都可以执行它,并且不需要特定权限。 4. 远程存储过程在SQL Server中,远程存储过程(Remote Stored Procedures)是位于远程服务器上存储过程,普通可以使用分布式查询和EXECUTE命令执行一种远程存储过程。 5. 扩展存储过程扩展存储过程(Extended Stored Procedures)是顾客可以使用外部程序语言编写存储过程,并且扩展存储过程名称普通以xp_开头。存储过程长处1. 存储过程由于SQL语句已经预编绎过了,因而运营速度比较快。2. 可保证数据安全性和完整性。通过存储过程可以使没有权限顾客在控制
38、之下间接地存取数据库,从而保证数据安全。通过存储过程可以使有关动作在一起发生,从而可以维护数据库完整性。3. 可以减少网络通信量。存储过程重要是在服务器上运营,减少对客户机压力。4. 存储过程可以接受参数、输出参数、返回单个或各种成果集以及返回值。可以向程序返回错误因素5. 存储过程可以包括程序流、逻辑以及对数据库查询。同步可以实体封装和隐藏了数据逻辑。13. 触发器提示:触发器(trigger)是个特殊存储过程,它执行不是由程序调用,也不是手工启动,而是由事件来触发,例如当对一种表进行操作( insert,delete, update)时就会激活它执行。触发器经惯用于加强数据完整性约束和业务
39、规则等。触发器对表进行插入、更新、删除时候会自动执行特殊存储过程。触发器普通用在check约束更加复杂约束上面。触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。触发器和普通存储过程区别是:触发器是当对某一种表进行操作。诸如:update、insert、delete这些操作时候,系统会自动调用执行该表上相应触发器。 SQL Server 中触发器可以分为两类:DML触发器和DDL触发器,其中DDL触发器它们会影响各种数据定义语言语句而激发,这些语句有create、alter、drop语句。 DML触发器分类(依照触发时间来分)1. after触发器(之后触发
40、) (1). insert触发器 (2). update触发器 (3). delete触发器 2. instead of 触发器(之前触发) 其中after触发器规定只有执行某一操作insert、update、delete之后触发器才被触发,且只能定义在表上。而instead of触发器表达并不执行其定义操作(insert、update、delete)而仅是执行触发器自身。既可以在表上定义instead of触发器,也可以在视图上定义。 触发器有两个特殊表:插入表(instered表)和删除表(deleted表)。这两张是逻辑表也是虚表。有系统在内存中创立者两张表,不会存储在数据库中。并且两张
41、表都是只读,只能读取数据而不能修改数据。这两张表成果总是与被改触发器应用表构造相似。当触发器完毕工作后,这两张表就会被删除。Inserted表数据是插入或是修改后数据,而deleted表数据是更新前或是删除数据。对表操作Inserted逻辑表Deleted逻辑表增长记录(insert)存储增长记录无删除记录(delete)无存储被删除记录修改记录(update)存储更新后记录存储更新前记录 Update数据时候就是先删除表记录,然后增长一条记录。这样在inserted和deleted表就均有update后数据记录了。注意是:触发器自身就是一种事务,因此在触发器里面可以对修改数据进行某些特殊检查
42、。如果不满足可以运用事务回滚,撤销操作。 insert触发器示例create trigger tri_insert on student for insert as declare student_id char(10) select student_id=s.student_id from student s inner join inserted i on s.student_id=i.student_id if student_id= begin raiserror(不能插入1学号!,16,8) rollback tran end go update触发器示例create trigger
43、 tri_update on student for update as if update(student_id) begin raiserror(学号不能修改!,16,8) rollback tran end go delete触发器示例create trigger tri_delete on student for delete as declare student_id varchar(10) select student_id=student_id from deleted if student_id=admin begin raiserror(错误,16,8) rollback t
44、ran end14.内联接和外联接区别提示:连接查询通过连接运算符可以实现各种表查询。连接是关系数据库模型重要特点,也是它区别于其他类型数据库管理系统一种标志。在关系数据库管理系统中,表建立时各数据之间关系不必拟定,常把一种实体所有信息存储在一种表中。当检索数据时,通过连接操作查询出存储在各种表中不同实体信息。连接操作给顾客带来很大灵活性,她们可以在任何时候增长新数据类型。为不同实体创立新表,尔后通过连接进行查询。连接可以在SELECT 语句FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于将连接操作与WHERE子句中搜索条件区别开来。因此,在Transact-SQL
45、中推荐使用这种办法。SQL-92原则所定义FROM子句连接语法格式为: FROM join_table join_type join_table ON (join_condition)其中join_table指出参加连接操作表名,连接可以对同一种表操作,也可以对多表操作,对同一种表操作连接又称做自连接。join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据比较操作,并列出这些表中与连接条件相匹配数据行。依照所使用比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。外连接分为左外连接(LEFT OUTER
46、 JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同是,外连接不只列出与连接条件相匹配行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件数据行。交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行笛卡尔积,其成果集合中数据行数等于第一种表中符合查询条件数据行数乘以第二个表中符合查询条件数据行数。连接操作中ON (join_condition) 子句指出连接条件,它由被连接表中列和比较运算符、逻辑运算符等构成。无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接连接。例如:SELECT p1.pub_id,p2.pub_id,p1.pr_infoFROM pub_info AS p1 INNER JOIN pub_info AS p2