第6章 数据库保护精选PPT.ppt
第6章 数据库保护1第1页,本讲稿共86页6.1 事务的概念事务:是一个不可分割的操作序列,该操作序列要么全做,要么全不做。事务和程序事务的开始与结束隐式控制隐式控制显式控制显式控制强调:事务和程序是两个概念。一个程序中可以包含多个事务。隐式控制:隐式控制:由DBMS按缺省规定自动划分。显式控制:显式控制:BEGIN TRANSACTION 事务开始 COMMIT 事务提交,重新改写数据库 ROLLBACK 事务提交,发生错误撤消2第2页,本讲稿共86页BEGIN TRANSACTION INSERT INTO S(S#,Sname,Sage,Sdept)VALUES(10002,李娜,18,计算机)COMMIT BEGIN TRANSACTION DELETE FROM S WHERE S#=10002;DELETE FROM SC WHERE S#=10002;ROLLBACK3第3页,本讲稿共86页6.1 事务的概念事务的ACID特性AtomicityConsistencyIsolationDurability4第4页,本讲稿共86页1、原子性(Atomicity):事务是不可分割的工作单位2、一致性(Consistency)事务提交后,数据库从一个一致性状态变到另一个一致性状态。3、隔离性(Isolation)在事务完成之前,它对数据库产生的结果不能被其它事务引用。4、持续性(Durability)一旦事务执行成功(提交),其对数据库产生的效果永久有效。事务的性质(ACID)5第5页,本讲稿共86页6.1 事务的概念事务管理功能事务管理功能保证事务的ACID特性事务ACID特性可能遭到破坏的原因:多个事务并行运行时,多个事务中的操作交叉执行;事务正在执行时,被强迫终止。数据库的恢复和并发控制恢复和并发控制6第6页,本讲稿共86页6.2 数据库恢复硬件故障、软件故障、操作失误、恶意破坏等,导致事务运行的非正常中断,甚至破坏数据库,造成数据丢失数据库恢复:把数据库从错误状态恢复到某一个已知的正确状态7第7页,本讲稿共86页6.2 数据库恢复一、数据库的故障种类事务内部故障系统故障介质故障计算机病毒8第8页,本讲稿共86页一、数据库的故障种类事务内部故障银行转帐业务:从帐号甲将一笔金额转入帐号乙BEGIN TRANSACTION读取帐号甲的余额BALANCE;BALANCE=BALANCE AMOUNT;写回BALANCE;if(BALANCE 0)then ROLLBACK;else 读取帐号乙的余额BALANCE1;BALANCE1=BALANCE1+AMOUNT;写回BALANCE1;COMMIT;9第9页,本讲稿共86页一、数据库的故障种类事务内部故障非预期的事务内部故障:运算溢出、违约处理办法:强行回滚ROLLBACK该事务,即事务撤销(UNDO操作)10第10页,本讲稿共86页一、数据库的故障种类系统故障系统停机,需要重启。如CPU故障、OS故障、DBMS代码错误、系统断电影响正在运行的事务,但不会破坏数据库处理办法:(1)UNDO所有未完成的事务;(2)REDO所有已提交的事务11第11页,本讲稿共86页一、数据库的故障种类介质故障硬故障:磁盘损坏、磁头碰撞、瞬间强磁场干扰等出现概率小、破坏性非常大计算机病毒破坏系统、修改数据12第12页,本讲稿共86页一、数据库的故障种类各类故障的影响数据库本身被破坏数据库没有被破坏,但数据可能不正确如何恢复呢?13第13页,本讲稿共86页两个关键问题:1 如何建立冗余数据 2 如何利用冗余数据实施数据库恢复6.2 数据库恢复二、数据库恢复技术14第14页,本讲稿共86页二、数据库恢复技术如何建立冗余数据数据转储登录日志文件数据转储DBA定期地将整个数据库复制到其它外存上保存的过程后备副本/后援副本(BACKUP)15第15页,本讲稿共86页数据转储数据转储静态转储静态转储:在系统空闲的时候进行,转储期间不允许对数据库进行操作。优点:简单、保证副本和数据库数据的一致性;缺点需等待。动态转储动态转储:转储期间允许对数据库进行操作优点:效率高;缺点是不能保证副本和数据库数据的一致性,必须记录转储期间各事务对数据库的修改活动(日志文件)16第16页,本讲稿共86页两种转储方式:海量转储:每次转储数据库中的全部数据增量转储:每次转储上一次转储后更新过的数据 两种转储状态动态转储静态转储 两种转储 方式海量转储动态海量转储静态海量转储增量转储动态增量转储静态增量转储17第17页,本讲稿共86页二、数据库恢复技术登录日志文件用来记录事务对数据库的更新操作的文件两种格式的日志文件:(1)以记录为单位的日志文件(2)以数据块为单位的日志文件例如:以记录为单位的日志文件各个事务的开始标记各个事务的结束标记各个事务的所有更新操作日志记录:日志记录:事务标识事务标识 操作类型操作类型 操作对象操作对象 更新前的旧值更新前的旧值 更新后的新值更新后的新值18第18页,本讲稿共86页二、数据库恢复技术日志文件的作用:进行事务故障恢复和系统故障恢复,并协助后备副本进行介质故障恢复。事务故障和系统故障恢复必须用日志文件;在动态转储方式中必须建立日志文件,并结合后备副本和日志文件对数据库进行有效的恢复;静态转储时也可建立日志文件19第19页,本讲稿共86页二、数据库恢复技术登记日志文件的原则先来先登记原则:严格按照并发事务执行的时间顺序登记;先写日志文件原则:必须先写日志文件,后写数据库。20第20页,本讲稿共86页数据库镜像:自动将数据库中的全部数据或关键数据复制到另外一张盘上。应用1应用2应用3应用4update复制readreadread应用1应用2应用3应用4update恢复readread(a)(b)read镜像镜像缺点:降低系统效率21第21页,本讲稿共86页四、数据库恢复策略 1事务故障的恢复2系统故障的恢复 3介质故障的恢复对于不同的故障类型对于不同的故障类型要采用不同的恢复策略要采用不同的恢复策略 22第22页,本讲稿共86页多用户数据库系统事务执行方式串行执行:ACID无破坏,效率低并发执行:ACID可能破坏,效率高交叉并发:Interleaved Concurrency同时并发:Simultaneous Concurrency6.3 并发控制23第23页,本讲稿共86页一、并发操作引起的问题丢失修改不可重复读读“脏”数据6.3 并发控制24第24页,本讲稿共86页例:银行中,C账户上原有存款500元,现有两位顾客同时给此账户存款,分别运行下面两个事务:T1:READ(C),C=C+100,WRITE(C);T2:READ(C),C=C+200,WRITE(C);运行过程可能如下:(1)先执行事务T1,然后执行事务T2(2)先执行事务T2,然后执行事务T1(3)事务T1和事务T2并发执行25第25页,本讲稿共86页读出C,C=500读出C,C=500C=C+100,C=600把C写到数据库C=C+200,C=700把C写到数据库C:600C:700C:500T1的运行T2的运行26第26页,本讲稿共86页事务T1事务T2读出C,C=500 C=C+100 C=600读出C,C=500 C=C+200 C=700丢失修改27第27页,本讲稿共86页事务T1事务T2 读出A=50 读出B=100 求和=150 读出B=100 B=B*2 WRITE(B)读出A=50 读出B=200 求和=250(验算不对)28第28页,本讲稿共86页三种不可重复读读不一致T1读A,T2修改A,T1读A删除幻影T1读取元组集合A,T2删除部分元组,T1读取元组集合A插入幻影T1读取元组集合A,T2插入一些元组,T1读取元组集合A29第29页,本讲稿共86页事务T1事务T2 读出 C=100 C=C*2 WRITE(C)读出 C=200 ROLLBACK C恢复为100读“脏”数据T1修改A,T2读A,T1撤销修改30第30页,本讲稿共86页导致问题的原因丢失修改、不可重复读、读“脏”数据原因:并发操作破坏了事务的隔离性是否可以找到并发操作的合理调度方式,从而避免三类问题?31第31页,本讲稿共86页1 1、事务的表示方法:、事务的表示方法:Ri(X)表示事务Ti的读X操作;Wi(X)表示事务Ti的写X操作。例:事务T1(Read(B)T1(Read(B);A=B+1A=B+1;write(A)write(A)事务T2(Read(A)T2(Read(A);B=A+1B=A+1;write(B)write(B)可以表示成:T1:R1(B)W1(A)T2:R2(A)W2(B)二、调度可串行性32第32页,本讲稿共86页R1(X)R1(Y)W1(Y)符号表示先于(),即R1(X)先于W1(Y)执行,R1(Y)先于W1(Y)执行,而R1(X)和R1(Y)的先后次序无关紧要。33第33页,本讲稿共86页2、冲突操作定义定义:如果两个操作来自不同的事务,它们对同一数据单位进行操作,并且其中至少有一个是写操作,则称这两个操作是相互冲突的或冲突操作。例:事务T0:W0(X)W0(Y)W0(Z)事务T1:R1(X)R1(Z)W1(X)则在这两个事务中有冲突操作:R R1 1(X)(X)与与W W0 0(X)(X)W W1 1(X)(X)与与W W0 0(X)(X)R R1 1(Z)(Z)与与W W0 0(Z)(Z)调度:对于冲突操作不能同时执行,哪个先执行,哪个后执行。34第34页,本讲稿共86页3、调度:事务执行的次序。设=T1,T2,T n是一事务集,的一个调度S是一个拟序集(,s)其中:1)说明S执行的操作正是T1,T2,T n 的操作。2)s 说明调度S遵守每个事务的操作的内部执行次序 3)每对冲突操作的执行次序由S决定。R1(X)R1(Z)W1(X)S1=W0(X)W0(Y)W0(Z)S1=(W0(X),W0(Y),W0(Z),R1(X),R1(Z),W1(X),W0(X)R1(X),W0(Z)R1(Z),R1(X)W1(X),R1(Z)W1(X)S1=(W0(X),W0(Y),W0(Z),R1(X),R1(Z),W1(X),W0(X)R1(X),W0(Z)R1(Z),R1(X)R1(Z),R1(X)W1(X),R1(Z)W1(X)S1=(W0(X),W0(Y),W0(Z),R1(X),R1(Z),W1(X),W0(X)R1(X),W0(Z)R1(Z),R1(Z)R1(X),R1(X)W1(X),R1(Z)W1(X)35第35页,本讲稿共86页4、串行调度:如果在一个调度中,各个事务不交叉执行,而顺序地串行执行,这个调度被称为串行调度。定义:定义:如果调度S中的任意两个事务Ti和Tj,如果Ti的所有操作都先于Tj的所有操作,或者相反,则称S为串行调度。串行调度。注意:注意:在串行调度中每一个事务都是在下一个事务开始执行之前提交。因此,串行调度没有并发性串行调度没有并发性,故每一个串行调度都是一个正确的执行。5、并发调度:如果在一个调度中,各个事务交叉地执行,这个调度称为并发调度。36第36页,本讲稿共86页6、可串行化的调度:如果一个事务集的并发调度与某一串行调度是等价的,则称该并发调度是可串行化的。7、串行化定理定理:定理:一个调度S是可串行化的,当且仅当它的串行图是无环的。无环的。串行图串行图:设S是若干事务T1,T2,Tn的一个调度,S的串行图SG(S)是一个有向图,其构成规则如下:1)图中的结点表示事务2)如果Oi和Oj是冲突操作,且Oi先于Oj执行,则在图中有一条边TiTj。37第37页,本讲稿共86页R1(X)W1(X)R3(X)W3(Z)R2(X)W2(Y)W1(Y)T2T1T3R1(X)W1(X)R3(X)W3(X)R2(X)W2(Y)W1(Y)T2T1T3例:38第38页,本讲稿共86页8、等价的串行调度:如果SG(S)是无环的,则S等价于SG(S)的任一拓扑排序。T2T1T3拓扑排序为:T2,T1,T3T1 T2 T3 拓扑排序为:T1,T3,T2 或为:T1,T2,T3 拓扑排序:从无入弧的节点开始递归去除拓扑排序:从无入弧的节点开始递归去除39第39页,本讲稿共86页W0(X)W0(Y)W0(Z)R1(X)R1(Z)W1(X)R3(Z)W3(Y)W3(Z)R4(X)R4(Y)R4(Z)R2(X)W2(Y)T0 T1 T2 T3 T4 调度S的串行图拓扑排序为:T0,T2,T1,T3,T4或为:T0,T2,T3,T1,T440第40页,本讲稿共86页1 1、封锁封锁:事务T在对数据进行操作之前,先向系统申请对其进行加锁,获得锁后不允许其它事务更新该数据,直到事务T释放该数据上的锁。2 2、封锁的类型封锁的类型排它锁排它锁(又称写锁,简称X锁)若事务T对数据对象A加上X锁,则其它事务不能在A上加任何类型的锁,此时,只允许事务T读取和修改A,直到T释放A上的锁。共享锁共享锁(又称读锁,简称S锁)若事务T对数据对象A加上S锁,则其它事务也可在A上加S锁,但不能加X锁,事务T和其它事务只能读取A,但不能修改A。三、基于封锁的并发控制41第41页,本讲稿共86页封锁封锁级别级别加锁加锁放锁放锁防止丢防止丢失修改失修改保证可保证可重复读重复读不读不读“脏脏”数数据据一级一级事务事务T T在修改数据在修改数据A A之之前必须先对其加前必须先对其加X X锁锁事务结束事务结束才释放才释放X X锁锁可防可防止止不能不能保证保证不能不能保证保证二级二级一级封锁协议一级封锁协议+事事务务T T在读取数据在读取数据A A之前之前必须对其加必须对其加S S锁锁读完后即读完后即可释放可释放S S锁锁可防可防止止不能不能保证保证能保能保证证三级三级一级封锁协议一级封锁协议+事事务务T T在读取数据在读取数据A A之前之前必须对其加必须对其加S S锁锁事务结束事务结束才释放才释放S S锁锁可防可防止止能保能保证证能保能保证证3、封锁协议封锁协议42第42页,本讲稿共86页一级封锁协议例Xlock ARead(A)A=10A=A-5Write(A)CommitUnlock AXlock ARead(A)A=5A=A-5Write(A)CommitUnlock A等待等待等待等待获得 Xlock A事务T1事务T2没有丢失修改READ(C,D)M=C+DREAD(C,D)M=C+DREAD(C,D)C=C+10D=D+10事务T1事务T2不可重复读Write(D)Write(C)Xlock CXlock DUnlock CUnlock D43第43页,本讲稿共86页二级封锁协议例READ(C,D)M=C+DREAD(C,D)C=C+10D=D+10事务T1事务T2防止读“脏”数据Write(D)Write(C)Xlock CXlock DUnlock CUnlock DRollBackSlock CSlock D等待等待等待获得Slock C获得Slock DUnlock CUnlock DREAD(C,D)M=C+DREAD(C,D)C=C+10D=D+10事务T1事务T2不可重复读Write(D)Write(C)Xlock CXlock DUnlock CUnlock DSlock CSlock DUnlock CUnlock D等待获得Xlock C获得Xlock DREAD(C,D)M=C+DSlock CSlock DUnlock CUnlock D等待获得Slock C获得Slock DCommitCommitCommit44第44页,本讲稿共86页三级封锁协议例READ(C,D)M=C+DREAD(C,D)C=C+10D=D+10事务T1事务T2可重复读Write(D)Write(C)Xlock CXlock DUnlock CUnlock DREAD(C,D)M=C+DSlock CSlock DUnlock CUnlock D等待获得Xlock C获得Xlock D等待CommitCommit45第45页,本讲稿共86页活锁活锁:事务T1,T2申请数据对象A,T1先给A加锁,T1释放A上的锁后,事务T3又给A加锁,T2等待,这样,A始终被其他事务封锁,事务T2可能长时间得不到A,这种情况称为活锁。避免活锁的方法:采用先来先服务的原则。死锁死锁:事务T1已经封锁A,而又想申请封锁B,而此时事务T2已经封锁B,而又想申请封锁A,这样,T1等待T2释放B,而T2等待T1释放A,使得T1、T2均无法继续执行下去,这种情况称为死锁。LOCK A LOCK B LOCK B LOCK A 46第46页,本讲稿共86页 1)某一事务在对数据进行读、写之前,先要申请并获得对该数据的封锁。2)在释放一个封锁之后,事务不再申请和获得任何其它封锁。说明:说明:规则1避免了两个冲突操作同时存取同一数据。规则2把每个事务分为两个阶段:上升段和下降段。上升下降每一事务只有得到全部锁以后才放锁。4、两阶段封锁协议(、两阶段封锁协议(2PL协议)协议)47第47页,本讲稿共86页 2PL调度优点:简单 缺点:易死锁 例如:对于如下两个事务采用两段锁协议 T1:R1(X)W1(Y)T2:W2(Y)W2(X)T1与T2的一个调度过程:1 初始时,没有事务占有锁 2 调度器接到R1(X),对X加读锁,执行R1(X)。3 调度器接到W2(Y),对Y加写锁,执行W2(Y)4 调度器接到W2(X),T2等待 5调度器接到W1(Y),T1等待 这样就造成了死锁。48第48页,本讲稿共86页定理:任何一个遵从2PL协议的调度都是可串行化的。说明:事务遵守2PL协议是可串行化调度的充分条件,而不是必要条件。即若并发事务都遵守2PL协议,则对这些事务的任何并发调度策略都是可串行化的;若对并发事务的一个调度是可串行化的,不一定所有事务都符合2PL协议。49第49页,本讲稿共86页预防死锁预防死锁 *一次封锁法:要求每个事务必须一次将所有要使用的数据全部封锁,否则,不能执行。缺点:降低了系统的并发度。*顺序封锁法:预先对数据对象规定一个封锁次序,所有事务都按这个次序实行封锁。缺点:排列封锁次序困难。判断并解除死锁判断并解除死锁 *超时法:事务的等待超过了规定的时限 *等待图法:检测等待图中是否有回路存在。四、解决死锁50第50页,本讲稿共86页6.4 数据库安全性数据库的安全性数据库的安全性:就是防止非法用户使用数据库造成数据泄露、更改或破坏,以达到保护数据库的目的。计算机系统安全性计算机系统安全性 为计算机系统建立和采取的各种安全保护措施,保护计算机系统(硬件、软件及数据)不会遭到破坏。保护数据库以防止不合法使用一般计算机系统中,安全措施是一级一级层层设置的51第51页,本讲稿共86页用户标识与鉴别存取控制 视图机制审计数据加密用户DBMS DB OS用户标识和鉴定存取控制操作系统安全保护密码存取*为不同的用户定义不同的视图把用户对数据库的所有操作自动记录下来放入审计日志中。Oracle 安全措施主要有:1 用户标识和鉴定 2 存取控制 3 审计52第52页,本讲稿共86页XMSJCZ用户甲02-10-6 22:32:55 进入系统用户甲02-10-8 20:33:07 录入数据用户乙02-10-9 8:50:42 进入系统用户乙02-10-11 11:53:13 修改密码用户丁02-10-13 7:19:29 进入系统用户丁02-10-28 8:00:53 查询数据53第53页,本讲稿共86页1.用户标识与鉴别用户标识:Identification用户名:User Name,或者用户标识号:UID用户鉴别:Authentication用户名+口令:Password54第54页,本讲稿共86页2.存取控制数据库安全的主要思路:存取控制给合适的人以合适的权限存取控制机制定义用户及其权限,在数据字典中登记用户权限;权限合法性检查55第55页,本讲稿共86页2.存取控制两类实现存取控制的方法自主存取控制自主存取控制:Discretionary Access Controla)用户对不同的数据对象有不同的权限;b)不同用户对同一对象具有不同的权限;c)允许用户之间的传递授予权限强制存取控制强制存取控制:Mandatory Access Controla)以一定的密级标注数据对象b)授予每个用户以某一级别的许可证多数DBMS均支持DAC56第56页,本讲稿共86页自主存取控制DAC用户权限谁+在哪个对象上+可以干什么事情授权:将用户权限用户权限授予特定用户用户的过程用户数据库对象操作类型用户权限的二要素57第57页,本讲稿共86页自主存取控制DAC对象类型 数据库对象数据库对象操作类型操作类型数据库模式Create Schema基本表Create Table,Alter Table模式视图Create View索引Create Index数据基本表和视图Select,Insert,Update,Delete,References,All Privileges数据属性列Select,Insert,Update,Delete,References,All Privileges58第58页,本讲稿共86页自主存取控制DACSQL标准对DAC的支持授权:Grant语句回收:Revoke语句SQL创建用户时赋予用户的权限DBA、RESOURCE、CONNECTCreate User With DBA|RESOURCE|CONNECT59第59页,本讲稿共86页自主存取控制DAC默认用户权限:CONNECTCreate User With DBA|RESOURCE|CONNECTCONNECT用户的初始权限:只能登录数据库RESOURCE用户的初始权限:创建基本表和视图,并成为所创建对象的属主 不能创建模式和新用户 可授权DBA用户的初始权限:创建新用户、模式、基本表、视图等 拥有对所有数据库对象的存取权限 可授权60第60页,本讲稿共86页自主存取控制DAC授权权限:Grant语句把“在某个对象某个对象上”“干某种事情某种事情”的权限授予“某个用户某个用户”GRANT ON TO WITH GRANT OPTION61第61页,本讲稿共86页自主存取控制DAC:=|:=PUBLIC|PUBLIC是所有数据库用户的总称若有WITH GRANT OPTION,则用户可将此特权转授给其它。不允许循环授权GRANT ON TO WITH GRANT OPTION62第62页,本讲稿共86页例如:GRANT SELECT ON TABLE 表1 TO PUBLIC;/将对表1的SELECT特权授予所有的用户。GRANT SELECT(列1,列5)ON 表1 TO sam;/将对表1中1和5列的INSERT特权授予sam。GRANT ALL PRIVILEGES ON TABLE 表1 TO bob,sam;/将对表1的所有操作特权授予bob和sam。GRANT UPDATE(列2,列4)ON 表1 TO wang WITH GRANT OPTION;/将对表1中2和4列的UPDATE特权授予wang,并允许他将此特权转授给其它用户。63第63页,本讲稿共86页自主存取控制DAC回收权限:Revoke语句把“在某个对象某个对象上”“干某种事情某种事情”的权限从“某个用户某个用户”那里要回来REVOKE ON FROM CASCADE|RESTRICTREVOKE UPDATE(Sno)ON TABLE Student From user4;REVOKE UPDATE(Sno)ON TABLE Student From user4;64第64页,本讲稿共86页以单个权限为单位授权太过麻烦角色角色:权限的集合为具有相同权限的用户群创建一个角色基于角色来管理权限简化授权过程创建角色给角色授权或授予角色给用户授予角色自主存取控制DAC65第65页,本讲稿共86页自主存取控制DAC角色的创建CREATE ROLE 给角色授权GRANT ON TO GRANT TO WITH ADMIN OPTION给用户授予角色GRANT TO WITH ADMIN OPTION66第66页,本讲稿共86页角色权限的回收REVOKE ON FROM 举例:创建角色R1使R1具有Student表的Select/Update/Insert权限将R1角色授予用户王平和李明修改R1,使其具有Student表的Delete权限自主存取控制DAC67第67页,本讲稿共86页3.视图机制视图机制王平老师只能查询计算机系学生的信息系主任李明具有处置计算机系学生信息的所有权限CREATE VIEW CS_STU AS Select*From Student Where Sdept=CS;GRANT SELECT ON CS_STU TO 王平;GRANT ALL PRIVILIGES ON CS_STU TO 李明68第68页,本讲稿共86页4.审计Audit和数据加密审计:C2级DBMS的必要指标,是把用户对数据库的所有操作自动记录下来放入审计日志用户级审计系统级审计数据加密69第69页,本讲稿共86页数据库完整性:数据库完整性:数据的正确性和相容性。数据的正确性和相容性。完整性安全性数据库完整性和安全性的区别完整性防止错误信息的输入与输出。安全性是保护数据库防止恶意的破坏和非法的存取。6.5 数据库完整性70第70页,本讲稿共86页DBMS对数据库完整性的支持提供定义完整性约束的机制实体完整性、参照完整性、自定义完整性提供完整性检查的方法违约处理:拒绝执行、级联执行6.5 数据库完整性71第71页,本讲稿共86页1 完整性约束的概念完整性约束:加在数据之上的语义约束完整性约束的作用对象 关系:若干元组间、关系集合上以及关系之间的联系的约束 元组:元组的约束是元组中各个字段间的联系的约束 属性列:主要是列的数据类型、取值范围、精度、排序等约束条件72第72页,本讲稿共86页1 完整性约束的概念完整性约束的类型静态约束静态约束:数据库在确定状态时数据对象应满足的约束条件;动态约束动态约束:数据库从一种状态转变为另一种状态时,新、旧值之间应满足的约束条件73第73页,本讲稿共86页 1)静态列约束:是对一个列的取值域等的限制。对数据类型的约束;对数据格式的约束;对取值范围或取值集合的约束;对空值的约束;2)静态元组约束:规定组成一个元组的各个列之间的约束关系。例如:库存关系中出库数量不能大于库存数量。3)静态关系约束:反映了一个关系中各个元组之间或者若干关系之间存在的联系或约束。实体完整性约束;参照完整性约束;74第74页,本讲稿共86页 1)动态列约束:规定修改列定义或列值时应满足的约束条件。如:将允许为空的列修改为不允许为空;学生的年龄只能增长。2)动态元组约束:规定修改元组的值时其各个属性列之间需要满足的约束条件例如:职工工资调整时新工资不得低于原工资工龄*1.5。3)动态关系约束:加在关系变化前后状态上的限制条件。事务的ACID特性:原子性/一致性/隔离性/持久性75第75页,本讲稿共86页2 实体/参照完整性约束实体完整性:PRIMARY KEY列级定义关系级定义参照完整性:FOREIGN KEY/REFERENCES违约处理:拒绝、级联删除、设置为空76第76页,本讲稿共86页2 实体/参照完整性约束CREATE TABLE SC(Sno CHAR(8)NOT NULL,Cno CHAR(4)NOT NULL,Grade SMALLINT,PRIMARY KEY(Sno,Cno),FOREIGN KEY(Sno)REFERENCES Student(Sno)ON DELETE CASCADE ON UPDATE CASCADE,FOREIGN KEY(Cno)REFERENCES Course(Cno)ON DELETE NO ACTION ON UPDATE CASCADE);77第77页,本讲稿共86页3 用户自定义完整性约束定义属性列的约束条件列值非空:NOT NULL列值唯一:UNIQUE语义检查:CHECK短语短语举例:性别只允许取值“男”或“女”CREATE TABLE Student(Ssex CHAR(2)CHECK(Ssex IN(“男男”,“女女”),);成绩只能在成绩只能在0-100之间之间:CREATE TABLE SC(.Grade SMALLINT CHECK(Grade=0 and Grade=100),);78第78页,本讲稿共86页违约处理和保护:违约处理和保护:create table s(create table s(sno char(2)primary key,sno char(2)primary key,sgender char(2)check(sgender in(f,m)sgender char(2)check(sgender in(f,m)insert into s values(a,1)INSERT 语句与 COLUMN CHECK 约束 CK_s_sgender_2D27B809 冲突。79第79页,本讲稿共86页3 用户自定义完整性约束定义元组的约束条件:CHECK 男性的名字一定不能以Ms.打头CREATE TABLE Student(Sname CHAR(8)NOT NULL,Ssex CHAR(2)CHECK(Ssex IN(男男,女女)and(Ssex=女女)OR Sname NOT LIKE Ms.%),);80第80页,本讲稿共86页3 用户自定义完整性约束完整性约束命名子句CONSTRAINT PRIMARY KEY短语|FOREIGN KEY短语|CHECK短语CREATE TABLE Student(Sno NUMERIC(6)CONSTRAINT c1 CHECK(Sno BETWEEN 90000 AND 99999),Sname CHAR(8)CONSTRAINT c2 NOT NULL,Ssex CHAR(2)CONSTRAINT c3 CHECK(Ssex IN(男男,女女),);81第81页,本讲稿共86页3 用户自定义完整性约束域约束:DOMAIN建立性别域:CREATE DOMAIN GenderDom CHAR(2)CHECK(VALUE IN(男,女);CREATE TABLE Student(Ssex GenderDom,);82第82页,本讲稿共86页3 用户自定义完整性约束触发器:TRIGGER定义在关系表上的由事件驱动的特殊过程一旦定义,任何用户对表的增删改操作均会由DBMS自动激活相应的触发器,进行完整性检查非SQL核心规范的内容,但一般DBMS均提供支持83第83页,本讲稿共86页创建一个触发器sc_trig,当插入或者更新“学习”表时,该触发器检查“成绩”是否在指定的范围内CREATE TRIGGER sc_trig ON dbo.学习 FOR INSERT,UPDATEASdeclare score smallintselect score=scorefrom 学习if(score100)begin raiserror(学成成绩必须在0到100之间,16,1)rollback transactionend84第84页,本讲稿共86页安全性和完整性小结安全性用户标识和鉴别、存取访问控制、视图、审计、数据加密DAC与其SQL支持:GRANT、REVOKE、角色完整性完整性约束的概念实体/参照完整性用户自定义完整性:主键、外键、CHECK、CONTRAINT、DOMAIN、TRIGGER85第85页,本讲稿共86页小结6.1 事务的概念6.2 数据库恢复技术6.3 数据库并发控制6.4 数据库安全性6.5 数据库完整性86第86页,本讲稿共86页