当前位置:文档之家› oracle数据库的5种约束类型

oracle数据库的5种约束类型

oracle数据库的5种约束类型
oracle数据库的5种约束类型

oracle数据库的5种约束类型

oracle 数据库数据表的5个约束类型: 1.主键约束 2.外键约束 3.唯一约束 4.检查约束

5.非空约束F 主键约束:用来唯一标示表中的一个列,一个表中的主键约束只能有一个,但是可以在一个主键约束中包含多个列,也称为联合约束。外键约束:用来约束两个表中列之间的关系。唯一约束:用来唯一标示表中的列。与主键约束不同的是,在一个数据表中可以有多个唯一约束。检查约束:用来约束表中列的输入值得范围,比如在输入性别时,要求数据库中只能输入男或者女,就可以使用检查约束来约束该列。非空约束:约束该列一定要输入值。

--------------------------------------------------------------------------------------- 创建一个带检查约束的表:使用PL/SQL语句创建检查约束的语法如下所示:CONSTRAINT constraint_name CHECK(condition) [语法说明:] CONSTRAINT:关键词constraint_name:约束名称condition:约束条件列如:创建BOOKINFO表时,给图书价格加上一个检查约束,要求图书价格在10元到100元之间。CREATE TABLE BOOKINFO ( BOOKID INT, BOOKNAME CAHR, PUBLISH

VARCHAR2(20), PUBDATE VARCHAR2(20), PRICE DECIMAL, AUTHOR CHAR, STORE VARCHAR2(1), READER INT, REMARKS VARCHAR2(50), CONSTRAINT CK_PRICE

CHECK(PRICE>=10 AND PRICE );

--------------------------------------------------------------------------------------- 创建一个带非空约束的表:举例:在创建BOOKINFO表时,给图书名称加上一个非空约束。CREATE TABLE BOOKINFO ( BOOKID INT NOT NULL, BOOKNAME CHAR NOT NULL, PUBLISH VARCHAR2(20), PUBDATE VARCHAR2(20), PRICE DECIMAL, AUTHOR CHAR, STORE VARCHAR2(1), READER INT, REMAERKS VARCHAR2(50) );

---------------------------------------------------------------------------------------- 创建一个带唯一约束的表语法格式:CONSTRAINT constraint_name UNIQUE(column_name) 【语法说明】UNIQUE:唯一约束的关键词

column_name:唯一约束的名称。举例:创建BOOKINFO 表时,为图书名称(BOOKNAME)列添加唯一约束create table bookinfo ( bookid int, bookname char, publish varchar2(20), pubdate varchar2(20),

price decimal, author char, store varchar2(1), reader int, remarks varchar2(50), CONSTRAINT UN_BOOKNAME UNIQUE (bookname) );

------------------------------------------------------------------------------------------ 创建一个带外键约束的表语法格式:CONSTRAINT constraint_name FOREIGN KEY (column_name) REFERENCE table_name

(column_name) ON DELETE CASCADE [语法说明:] CONSTRAINT:创建约束的关键字FOREIGN KEY:外键约束的关键字Foreign REFERENCE:引用外表的关键词Referen table_name:需要引用的外表,column_name表示该表的列。举例: create table publishinfo ( publishid varchar(20) primary key, publishname varchar(30) ); create table bookinfo ( bookid int, bookname char, publish

varchar2(20), pubdate varchar2(20), price decimal, author char, store int, reader int, remarks varchar2(50), constraint fk_publish foreign key(publish) references publishinfo(publishid) on delete cascade ); 创建BOOKINFO表,该表带有外键约束,约束名称为

'FK_PUBLISH'。相关列为publish,该外键和PUBLISHINFO 表中的publishid列相关联。

数据库表结构设计参考

数据库表结构设计参考

表名外部单位表(DeptOut) 列名数据类型(精度范围)空/非空约束条件 外部单位ID 变长字符串(50) N 主键 类型变长字符串(50) N 单位名称变长字符串(255) N 单位简称变长字符串(50) 单位全称变长字符串(255) 交换类型变长字符串(50) N 交换、市机、直送、邮局单位邮编变长字符串(6) 单位标识(英文) 变长字符串(50) 排序号整型(4) 交换号变长字符串(50) 单位领导变长字符串(50) 单位电话变长字符串(50) 所属城市变长字符串(50) 单位地址变长字符串(255) 备注变长字符串(255) 补充说明该表记录数约3000条左右,一般不做修改。初始化记录。 表名外部单位子表(DeptOutSub) 列名数据类型(精度范围)空/非空约束条件 外部子单位ID 变长字符串(50) N 父ID 变长字符串(50) N 外键 单位名称变长字符串(255) N 单位编码变长字符串(50) 补充说明该表记录数一般很少 表名内部单位表(DeptIn) 列名数据类型(精度范围)空/非空约束条件 内部单位ID 变长字符串(50) N 主键 类型变长字符串(50) N 单位名称变长字符串(255) N 单位简称变长字符串(50) 单位全称变长字符串(255) 工作职责 排序号整型(4) 单位领导变长字符串(50) 单位电话(分机)变长字符串(50) 备注变长字符串(255)

补充说明该表记录数较小(100条以内),一般不做修改。维护一次后很少修改 表名内部单位子表(DeptInSub) 列名数据类型(精度范围)空/非空约束条件内部子单位ID 变长字符串(50) N 父ID 变长字符串(50) N 外键 单位名称变长字符串(255) N 单位编码变长字符串(50) 单位类型变长字符串(50) 领导、部门 排序号Int 补充说明该表记录数一般很少 表名省、直辖市表(Province) 列名数据类型(精度范围)空/非空约束条件ID 变长字符串(50) N 名称变长字符串(50) N 外键 投递号变长字符串(255) N 补充说明该表记录数固定 表名急件电话语音记录表(TelCall) 列名数据类型(精度范围)空/非空约束条件ID 变长字符串(50) N 发送部门变长字符串(50) N 接收部门变长字符串(50) N 拨打电话号码变长字符串(50) 拨打内容变长字符串(50) 呼叫次数Int 呼叫时间Datetime 补充说明该表对应功能不完善,最后考虑此表 表名摄像头图像记录表(ScreenShot) 列名数据类型(精度范围)空/非空约束条件ID 变长字符串(50) N 拍照时间Datetime N 取件人所属部门变长字符串(50) N 取件人用户名变长字符串(50) 取件人卡号变长字符串(50) 图片文件BLOB/Image

8实验八 数据库的完整性

实验八实现数据完整性一、实验目的 (1)实现数据完整性的概念及实施数据完整性的重要性。 (2)掌握数据完整性的分类。 (3)掌握完整性约束的添加、删除方法。 (4)掌握通用默认值的创建、实施与删除方法。 (5)掌握规则的创建、实施与删除方法。 (6)掌握级联删除、级联修改方法。 二、实验内容 1、完整性约束的添加、删除 (1)通过SQL Server Management Studio实施约束 a.为表Student的Birth字段创建检查约束,使输入的生日日期小于系统日期。 ①、选择Student表,右击→设计,打开Student表 ②、选择Birth一行,右击→CHECK约束,打开界面如下图所示 ③、单击“添加” ④、在表达式中写入:Entrance_date

b.为表Student的Sdept字段,设置默认值约束,默认值取’计算机系’。选择Sdept一行,在其列属性中修改其默认值 c.为Student表的Sname字段添加唯一性约束。 选择Sname一行,右击→索引/键 出现如下界面:

单击“添加”,在类型中选择“唯一键”,在列中选择“Sname”,名称自定义 最后单击“关闭”退出

d.将SC表的Sno,cno字段设置外键约束,约束名自已取,并允许级联删除与级联更新。(此要求在SQL Server2008R2中无法做出)若已存在外键约束,请先删除。 ①、选中Sno,右击→单击“关系”,出现如下信息,可见已存在外键约束 选中键,点击删除,完成约束删除 ②、添加约束: 选中Sno,右击,选择“关系”,出现如下信息,

Oracle查看被锁定的表和行的SQL

我们在操作数据库的时候,有时候会由于操作不当引起数据库表被锁定,这么我们经常不知所措,不知怎么给这些表解锁,在pl/sql Developer工具的的菜单“tools”里面的“sessions”可以查询现在存在的会话,但是我们很难找到那个会话被锁定了,想找到所以被锁的会话就 更难了,下面这叫查询语句可以查询出所以被锁的会话。如下: SELECT https://www.doczj.com/doc/7c13002351.html,ername, m.SID,sn.SERIAL#, m.TYPE, DECODE (m.lmode, 0, 'None', 1, 'Null', 2, 'Row Share', 3, 'Row Excl.', 4, 'Share', 5, 'S/Row Excl.', 6, 'Exclusive', lmode, LTRIM (TO_CHAR (lmode, '990')) ) lmode, DECODE (m.request, 0, 'None', 1, 'Null', 2, 'Row Share', 3, 'Row Excl.', 4, 'Share', 5, 'S/Row Excl.',

6, 'Exclusive', request, LTRIM (TO_CHAR (m.request, '990')) ) request, m.id1, m.id2 FROM v$session sn, v$lock m WHERE (sn.SID = m.SID AND m.request != 0) OR ( sn.SID = m.SID AND m.request = 0 AND lmode != 4 AND (id1, id2) IN ( SELECT s.id1, s.id2 FROM v$lock s WHERE request != 0 AND s.id1 = m.id1 AND s.id2 = m.id2) )ORDER BY id1, id2, m.request; 通过以上查询知道了sid和SERIAL#就可以开杀了 alter system kill session 'sid,SERIAL#';

数据库系统概论第五版课后习题答案王珊版

第二章关系数据库 1 .试述关系模型的三个组成部分。 答:关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。 2 .试述关系数据语言的特点和分类。 答:关系数据语言可以分为三类: 关系代数语言。 关系演算语言:元组关系演算语言和域关系演算语言。 SQL:具有关系代数和关系演算双重特点的语言。 这些关系数据语言的共同特点是,语言具有完备的表达能力,是非过程化的集合操作语言,功能强,能够嵌入高级语言中使用。 3 (略) 4 . 5 . 述关系模型的完整性规则。在参照完整性中,为什么外部码属性的值也可以为空?什么情况下才可以为空? 答:实体完整性规则是指若属性A是基本关系R的主属性,则属性A不能取空值。 若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:或者取空值(F的每个属性值均为空值);或者等于S中某个元组的主码值。即属性F本身不是主属性,则可以取空值,否则不能取空值。 6.设有一个SPJ数据库,包括S,P,J,SPJ四个关系模式: 1)求供应工程J1零件的供应商号码SNO: πSno(σJno=‘J1’(SPJ)) 2)求供应工程J1零件P1的供应商号码SNO: πSno(σJno=‘J1’∧Pno=‘P1‘(SPJ)) 3)求供应工程J1零件为红色的供应商号码SNO: πSno(πSno,,Pno(σJno=‘J1‘(SPJ))∞πPno(σCOLOR=’红‘(P))) 4)求没有使用天津供应商生产的红色零件的工程号JNO: πJno(SPJ)- πJNO(σcity=‘天津’∧Color=‘红‘(S∞SPJ∞P) 5)求至少用了供应商S1所供应的全部零件的工程号JNO: πJno,Pno(SPJ)÷πPno(σSno=‘S1‘(SPJ)) 7. 试述等值连接与自然连接的区别和联系。 答:连接运算符是“=”的连接运算称为等值连接。它是从关系R与S的广义笛卡尔积中选取A,B属性值相等的那些元组 自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。 8.关系代数的基本运算有哪些? 如何用这些基本运算来表示其他运算? 答:并、差、笛卡尔积、投影和选择5种运算为基本的运算。其他3种运算,即交、连接和除,均可以用这5种基本运算来表达。 第三章关系数据库语言SQL 1 .试述sQL 语言的特点。 答: (l)综合统一。sQL 语言集数据定义语言DDL 、数据操纵语言DML 、数据控制语言DCL

数据库系统概论第5版(王珊、萨师煊)课后答案第5章 数据库完整性

第5章数据库完整性 1.什么是数据库的完整性? 答: 数据库的完整性是指数据的正确性和相容性。 2.数据库的完整性概念与数据库的安全性概念有什么区别和联系? 答: 数据的完整性和安全性是两个不同的概念,但是有一定的联系。 前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出(Garba : e In Garba : e out )所造成的无效操作和错误结果。 后者是保护数据库防止恶意的破坏和非法的存取。也就是说,安全性措施的防范对象是非法用户和非法操作,完整性措施的防范对象是不合语义的数据。 3.什么是数据库的完整性约束条件? 答:完整性约束条件是指数据库中的数据应该满足的语义约束条件。 一般可以分为六类:静态列级约束、静态元组约束、静态关系约束、动态列级约束、动态元组约束、动态关系约束。 常见的静态关系约束有:实体完整性约束;参照完整性约束;函数依赖约束。 4.关系DBMS 的完整性控制机制应具有哪些功能? 答: DBMS 的完整性控制机制应具有三个方面的功能: 1)定义功能,即提供定义完整性约束条件的机制; 2)检查功能,即检查用户发出的操作请求是否违背了完整性约束条件; 3)违约反应:如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定 的动作来保证数据的完整性。 5.关系DBMS 在实现参照完整性时需要考虑哪些方面? 答:关系DBMS 在实现参照完整性时需要考虑以下几个方面: 1)外码是否可以接受空值。 2)被参照关系中删除元组或修改主码时,若使参照关系在被参照关系中找不到与之 相等的属性值,系统可选择的作法有三种:拒绝执行(默认策略)、 级联操作、设置为空值。 3)参照关系中插入或修改元组时,若使参照关系在被参照关系中找不到与之相等的 属性值,系统可选择的作法有三种:拒绝执行(默认策略)、级联操作(CASCADE)、 设置为空值。 6.假设有下面两个关系模式: 职工(职工号,姓名,年龄,职务,工资,部门号),其中职工号为主码; 部门(部门号,名称,经理名,电话),其中部门号为主码。 用sQL语言定义这两个关系模式,要求在模式中完成以下完整性约束条件的定义: 1)定义每个模式的主码; 2)定义参照完整性; 3)定义职工年龄不得超过60 岁。 CREATE TABLE 职工 (职工号CHAR(10), 姓名CHAR(10), 年龄NUMERIC (3), CONSTRAINT C1 CHECK (年龄<=60),

Oracle的事务及锁

1、事务的概念: 事务是一个基本的逻辑单元,它作为一个整体要么全部执行要么全部不执行。 2、事务的特性: 原子性:事务是处理的一个原子单位,每一个操作不可拆分,它要么全部执行成功,要么全部都不执行。 一致性:指事务完成时,必须使所有的数据在整体上不变。 隔离性:各事务之间相互隔离,此事务的执行不受其他并发事务执行的干扰。 持续性:指事务对数据库的改变应是持续存在的,不会因故障而发生丢失。 3、从功能是上划分,sql语言分为DDL、DML和DCL: 3.1DDL(Data Definition Language,数据定义语言): 用于定义和管理数据库中的所有对象的语言,如:create创建表空间、alter修改表空间、drop 删除表空间 3.2:DML(Data manipulation Language,数据操作语言): 处理数据等操作,如:insert插入数据、delete删除数据、update修改数据、select查询数据3.3:DCL(Data Control Language,数据控制语言): 授予或回收访问数据库的权限,控制数据库操作事务发生的时间及效果,对数据库实行监视,如:grant授权,rollback回滚,commit提交 4、事务的开始及结束: 一个事务可以由一条DDL语句单独组成或多条DML语句共同组成。一个事务从执行第一条sql语句开始,在它被提交或被回滚时结束。事务的提交可以是显式提交:用commit命令直接完成;也可以是提交隐式提交:用sql语句间接完成提交,这些语句有:alter,audit,comment,create,disconnect,drop,exit,grant,noaudit,quit,revoke,rename,会话终止等;还可以是自动提交:set autocommit on或set autocommit immediate设置为自动提交,则在插入、删除、修改语句执行后自动提交,使用set autocommit off可以取消自动提交,show autocommit可以查看自动提交是否打开。事务的回滚使用rollback;语句,可以为事务设置保存点,如:savepoint point1,然后使用rollback to [savepoint] point1回到保存点point1,若在point1后又设置了一个保存点savepoint point2,则在rollback to point1后将不能再回滚到point2,因为point2在point1的后面,point1的保存点不存在point2。 5、事务的并发性与一致性: 并发性:多个用户可以在同一时刻访问相同的数据。 一致性:保证并发性的同时,每个用户能得到一致的数据视图。 并发执行事务时,可能发生如下情况: ①脏读:某个事务读取了其他未提交事务修改过的数据。 脏读示例:提交读隔离级别可防止脏读,但不能防止不可重复读 ②不可重复读:某个事务读取一次数据后,其他事务修改了这些数据并进行了提交,这样当该事务重新读取这些数据时,就会得到与前一次读取不一致的结果。简单的说,就是同样的条件,你读取过的数据,再次读取时发现值不一样了。 不可重复读示例:可重复读隔离级别可防止脏读和不可重复读

数据库概论试题-数据库完整性

第10章数据库完整性 1.数据库的完整性是指数据的__正确性、相容性__。 2.什么是数据库的完整性? 答:数据库的完整性是指数据的正确性和相容性。 3.SQL标准使用了一系列概念来描述完整性,包括关系模型的____实体完整性、参照完整性、用户定义___完整性。 4.数据库的完整性概念与数据库的安全性概念有什么区别和联系? 答:数据的完整性和安全性是两个不同的概念,但是有一定的联系。 前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出(GarbageInGarbageOut)所造成的无效操作和错误结果。后者是保护数据库防止恶意的破坏和非法的存取。也就是说,安全性措施的防范对象是非法用户和非法操作,完整性措施的防范对象是不合语义的数据。 5.数据库完整性的定义一般由SQL的__DDL数据字典__语句来实现。它们作为数据库模式的一部分存入中。 6.什么是数据库的完整性约束条件?可分为哪几类? 7.关系模型的实体完整性在__CREATETABLE__中用__PRIMARYKEY___定义。 8.DBMS的完整性控制机制应具有哪些功能? 答:DBMS的完整性控制机制应具有三个方面的功能: 1.定义功能,即提供定义完整性约束条件的机制。 2.检查功能,即检查用户发出的操作请求是否违背了完整性约束条件。 3.违约反应:如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。 9.为了避免对基本表进行全表扫描,RDBMS核心一般都对__主码__自动建立一个__索引__。 10.RDBMS在实现参照完整性时需要考虑哪些方面? 11.关系模型的参照完整性在__CREATETABLE__中用___FOREIGNKEY__短语定义哪些列为外码列,用__REFERENCES__短语指明这些外码参照哪些表的主码。 12.假设有下面两个关系模式:职工(职工号,姓名,年龄,职务,工资,部门号),其中职工号为主码;部门(部门号,名称,经理名,电话),其中部门号为主码;用SQL语言定义这两个关系模式,要求在模式中完成以下完整性约束条件的定义:定义每个模式的主码;定义参照完整性;定义职工年龄不得超过60岁。 CREATETABLEDEPT(DeptnoNUMBER(2),DeptnameV ARCHAR(10),ManagerV ARCHAR(10), PhoneNumberChar(12)CONSTRAINTPK_SCPRIMARYKEY(Deptno));CREATETABLEEMP(E mpnoNUMBER(4),EnameV ARCHAR(10),AgeNUMBER(2),CONSTRAINTC1CHECK(Aage<= 60),JobV ARCHAR(9),SalNUMBER(7,2),DeptnoNUMBER(2),CONSTRAINTFK_DEPTNOFOR EIGNKEY(Deptno)REFERENCESDEPT(Deptno)); 13.关系系统中,当操作违反实体完整性、参照完整性和用户定义的完整性约束条件时,一般是如何分别进行处理的? 答:对于违反实体完整性和用户定义的完整性的操作一般都采用拒绝执行的方式进行处理。而对于违反参照完整性的操作,并不都是简单地拒绝执行,有时要根据应用语义执行一些附加的操作,以保证数据库的正确性。具体的处理可以参见上面第5题或《概论》10.2中相应部分。

Oracle常见死锁发生的原因以及解决方法

Oracle常见死锁发生的原因以及解决方法 Oracle常见死锁发生的原因以及解决办法 一,删除和更新之间引起的死锁 造成死锁的原因就是多个线程或进程对同一个资源的争抢或相互依赖。这里列举一个对同一个资源的争抢造成死锁的实例。 Oracle 10g, PL/SQL version 9.2 CREATE TABLE testLock( ID NUMBER, test VARCHAR(100) ) COMMIT INSERT INTO testLock VALUES(1,'test1'); INSERT INTO testLock VALUES(2,'test2'); COMMIT; SELECT * FROM testLock 1. ID TEST 2.---------- ---------------------------------- 3. 1 test1 4. 2 test2 死锁现象的重现: 1)在sql 窗口执行:SELECT * FROM testLock FOR UPDATE; -- 加行级锁并对内容进行修改, 不要提交 2)另开一个command窗口,执行:delete from testLock WHERE ID=1; 此时发生死锁(注意此时要另开一个窗口,不然会提示:POST THE CHANGE RECORD TO THE DATABASE. 点yes 后强制commit):

3)死锁查看: 1.SQL> select https://www.doczj.com/doc/7c13002351.html,ername,l.object_id, l.session_id,s.serial#, s.lockwait,s.status,s.machine, s.program from v$session s,v$locked_object l where s.sid = l.session_id; USER NAME SESSION_ID SERIAL# LOCKWAIT STATUS MACHINE PROGRAM 2.---------- ---------- ---------- -------- -------- ---------------------- ------------ 3.SYS 146 104 INACTIVE WORKGROUP\J-THINK PLSQLDev.exe 4.SYS 144 145 20834474 ACTIVE WORKGROUP\J-THINK PLSQLDev. exe 字段说明: Username:死锁语句所用的数据库用户; SID: session identifier,session 标示符,session 是通信双方从开始通信到通信结束期间的一个上下文。 SERIAL#: sid 会重用,但是同一个sid被重用时,serial#会增加,不会重复。 Lockwait:可以通过这个字段查询出当前正在等待的锁的相关信息。 Status:用来判断session状态。Active:正执行SQL语句。Inactive:等待操作。Killed:被标注为删除。 Machine:死锁语句所在的机器。 Program:产生死锁的语句主要来自哪个应用程序。 4)查看引起死锁的语句:

数据库表结构

数据库表结构: Admin(管理员表) 字段名描述类型约束备注ID唯一标示int Primary Key自增AdminType管理员类型int NOT NULL AdminName管理员姓名Char(12)NOT NULL LoginName管理员登录名CHAR(12)NOT NULL LoginPwd管理员登录密 码 CHAR(12)NOT NULL cart(购物车基本信息表) 字段名描述类型约束备注 ID唯一标示int Primary Key 自增 Member会员号int NOT NULL Money消费金额decimal(9,2)NOT NULL CartStatus购物车状态int NOT NULL 0代表商品放入购物车还未下单,1代表商品放入购物车且已下单 cartselectedmer 字段名描述类型约束备注ID唯一标示int Primary自增

Key Cart购物车int NOT NULL Merchandise商品int NOT NULL Number数量int NOT NULL Price商品市场价decimal(8,2)NOT NULL Money消费总额demical(9,2)NOT NULL category(商品类别表) 字段名描述类型约束备注 自增ID唯一标示int Primary Key CateName商品类别Char(40)NOT NULL CateDesc商品描述tex NOT NULL Leaveword(顾客留言表) 字段名描述类型约束备注 自增ID唯一标示int Primary Key Member会员号int NOT NULL Admin管理员int NOT NULL Number数量int NOT NULL Price商品单价decimal(8,2)NOT NULL Money消费总额demical(9,2)NOT NULL

Oracle数据库死锁的一些通用操作

经常碰到Oracle数据库死锁,原因很多,大部分情况下都需要用到的操作主要有以下几个方面:1、查找死锁。当发现死锁时,必须要知道死锁的情况和发生死锁的根源。 1)查看是否有死锁: select object_id,session_id,locked_mode from v$locked_object; 2)查看死锁的用户和进程: select https://www.doczj.com/doc/7c13002351.html,ername,t2.sid,t2.serial#,t2.logon_timefrom v$locked_object t1,v$session t2where t1.session_id=t2.sidorder by t2.logon_time; 3)查看死锁的对象: select t1.object_name,t2.session_id,t2.locked_modefrom dba_objects t1,v$locked_object t2where t1.object_id=t2.object_id; 或者 select t3.object_name,T3.object_type,https://www.doczj.com/doc/7c13002351.html,ername,t2.sid,t2.serial#,t2.logon_timefrom dba_objects t3,v$locked_object t1,v$session t2where t1.session_id=t2.sidand t3.object_id=t1.object_id order by t2.logon_time; 4)查看死锁发生的sql语句: select sql_text from v$sql where hash_value in (select sql_hash_value from v$session where sid in (select session_id from v$locked_object)); 2、删除死锁: (1).先杀Oracle进程: ALTER SYSTEM KILL SESSION '查出的SID,查出的SERIAL#'; (2).再杀操作系统进程: KILL -9 刚才查出的SPID 3、ORACLE里锁有以下几种模式: 0:none 1:null 空 2:Row-S 行共享(RS):共享表锁 3:Row-X 行专用(RX):用于行的修改 4:Share 共享锁(S):阻止其他DML操作 5:S/Row-X 共享行专用(SRX):阻止其他事务操作 6:exclusive 专用(X):独立访问使用 数字越大锁级别越高, 影响的操作越多。 4、一些基础判断 ?一般的查询语句如select ... from ... ;是小于2的锁, 有时会在v$locked_object出现。 select ... from ... for update; 是2的锁。 ?当对话使用for update子串打开一个游标时,所有返回集中的数据行都将处于行级(Row-X)独占式锁定,其他对象只能查询这些数据行,不能进行update、delete或 select...for update操作。

数据库技术与应用第5章 习题答案

第5章数据库完整性与安全性 1. 什么是数据库的完整性什么是数据库的安全性两者之间有什么区别和联系 解: 数据库的完整性是指数据库中数据的正确性、有效性和相容性,其目的是防止不符合语义、不正确的数据进入数据库,从而来保证数据库系统能够真实的反映客观现实世界。 数据库安全性是指保护数据库,防止因用户非法使用数据库造成数据泄露、更改或破坏。 数据的完整性和安全性是两个不同的概念,但是有一定的联系: 前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出所造成的无效操作和错误结果。后者是保护数据库防止恶意的破坏和非法的存取。也就是说,安全性措施的防范对象是非法用户和非法操作,完整性措施的防范对象是不合语义的数据。 2. 什么是数据库的完整性约束条件完整性约束条件可以分为哪几类 解: 完整性约束条件是指数据库中的数据应该满足的语义约束条件。一般可以分为六类:静态列级约束、静态元组约束、静态关系约束、动态列级约束、动态元组约束、动态关系约束。静态列级约束是对一个列的取值域的说明,包括以下几个方面:①数据类型的约束,包括数据的类型、长度、单位、精度等;②对数据格式的约束;③对取值范围或取值集合的约束;④对空值的约束;⑤其他约束。静态元组约束就是规定组成一个元组的各个列之间的约束关系,静态元组约束只局限在单个元组上。静态关系约束是在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束。常见的静态关系约束有:①实体完整性约束;②参照完整性约束;③函数依赖约束。动态列级约束是修改列定义或列值时应满足的约束条件,包括下面两方面:①修改列定义时的约束; ②修改列值时的约束。动态元组约束是指修改某个元组的值时需要参照其旧值,并且新旧值之间需要满足某种约束条件。动态关系约束是加在关系变化前后状态上的限制条件,例如事务一致性、原子性等约束条件。 3. 试述DBMS如何实现完整性控制。 解: 为了维护数据库的完整性,DBMS提供了以下三种机制: ①完整性约束条件定义完整性约束条件也称为完整性规则,是数据库中的数据必须满足的语义约束条件。SQL标准使用了一系列概念来描述完整性,包括关系模型的实体完整性、参照完整性和用户定义完整性。这些完整性一般由SQL的DDL语义来实现。它们作为数据库模式的一部分存入数据字典中。 ②完整性检查方法检查数据是否满足已定义的完整性约束条件称为完整性检查。一般在INSERT、UPDATE、DELETE语句执行后开始检查,也可以在事务提交时检查。检查这些操作执行后数据库中的数据是否违背了完整性约束条件。 ③违约处理若发现用户操作违背了完整性约束条件,应采取一定的措施,如拒绝(NOACTION)执行该操作,或级连(CASCADE)执行其它操作,进行违约处理以保证数据的完整性。 4. 现有以下四个关系模式: ,其中供应商编号为主码;供应商(供应商编号,姓名,电话,地点). 零件(零件编号,零件名称,颜色,重量),其中零件编号为主码; 工程(工程编号,工程名称,所在地点),其中工程编号为主码; 供应情况(供应商编号,零件编号,工程编号,数量),其中供应商编号,零件编号,工程编号为主码

oracle的TM锁T锁知识完全普及

o r a c l e的T M锁、T X锁知识完全普及锁概念基础 数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。 加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。 在数据库中有两种基本的锁类型:排它锁(ExclusiveLocks,即X锁)和共享锁(ShareLocks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库利用这两种基本的锁类型来对数据库的事务进行并发控制。 Oracle数据库的锁类型 根据保护的对象不同,Oracle数据库锁可以分为以下几大类:DML锁(datalocks,数据锁),用于保护数据的完整性;DDL锁(dictionarylocks,字典锁),用于保护数据库对象的结构,如表、索引等的结构定义;内部锁和闩(internallocksandlatches),保护数据库的内部结构。 DML锁的目的在于保证并发情况下的数据完整性,。在Oracle数据库中,DML锁主要包括TM锁和TX锁,其中TM锁称为表级锁,TX锁称为事务锁或行级锁。 当Oracle执行DML语句时,系统自动在所要操作的表上申请TM类型的锁。当TM锁获得后,系统再自动申请TX类型的锁,并将实际锁定的数据行的锁标志位进行置位。这样在事务加锁前检查TX 锁相容性时就不用再逐行检查锁标志,而只需检查TM锁模式的相容性即可,大大提高了系统的效率。TM锁包括了SS、SX、S、X等多种模式,在数据库中用0-6来表示。不同的SQL操作产生不同类型的TM锁。 在数据行上只有X锁(排他锁)。在Oracle数据库中,当一个事务首次发起一个DML语句时就获得一个TX锁,该锁保持到事务被提交或回滚。当两个或多个会话在表的同一条记录上执行DML语句时,第一个会话在该条记录上加锁,其他的会话处于等待状态。当第一个会话提交后,TX锁被释放,其他会话才可以加锁。 当Oracle数据库发生TX锁等待时,如果不及时处理常常会引起Oracle数据库挂起,或导致死锁的发生,产生ORA-60的错误。这些现象都会对实际应用产生极大的危害,如长时间未响应,大量事务失败等。 悲观封锁和乐观封锁 一、悲观封锁 锁在用户修改之前就发挥作用: Select..forupdate(nowait)

数据库实验报告完整性约束

数据库实验报告完整性约束

大连海事大学 数据库原理课程实验大纲 实验名称:实验七完整性实验学时: 2 适用专业:智能科学与技术 实验环境: Microsoft SQL server 2014 1实验目的 (1)掌握实体完整性、参照完整性和用户自定义完整性约束的创建方法。 (2)掌握完整性约束的运行检查机制。 (3)掌握参照完整性的级联删除和修改方法。(4)掌握正确设计关系模式完整性约束的方法。 2实验内容 2.1 掌握实体完整性约束的创建和使用方法 (1)创建表时定义由一个属性组成的主键(给约束命名)。 (2)创建表时定义由两个或两个以上属性组成的主键(给约束命名)。 (3)删除以上两个主键约束。 (4)利用ALTER TABLE语句定义上述两个主键。

2.2 掌握参照完整性约束的创建和使用方法 (5)创建表时定义一个列级参照完整性约束(给约束命名)。 (6)创建表时定义一个表级的由两个属性组成的参照完整性约束(给约束命名)。 (7)设计数据更新语句检查参照完整性约束是否起作用。 (8)删除上述完整性约束。 (9)利用ALTER TABLE 建立上述参照完整性约束,并且规定UPDATE/DELETE时的动作。(10)设计数据更新语句检查参照完整性约束及其相应的动作是否起作用。 2.3 掌握用户自定完整性约束的创建和使用方法 (11)定义一个检查约束,检查其值在某个取值范围内,并设计相应的更新语句检查该约束是否起作用? (12)定义一个检查其值符合某个匹配模式的检查约束(使用LIKE),并设计相应的更新语句检查该约束是否起作用? (13)定义一个检查其值符合某个正则表达式的检查约束(使用SIMILAR TO),并设计相应的更新语句检查该约束是否起作用?

《数据库系统概论》第四版 课后习题答案

5 .试述实现数据库安全性控制的常用方法和技术。 答:实现数据库安全性控制的常用方法和技术有: ( l )用户标识和鉴别:该方法由系统提供一定的方式让用户标识自己的名字或身份。每次用户要求进入系统时,由系统进行核对,通过鉴定后才提供系统的使用权。 ( 2 )存取控制:通过用户权限定义和合法权检查确保只有合法权限的用户访问数据库,所有未被授权的人员无法存取数据。例如CZ 级中的自主存取控制( DAC ) , Bl 级中的强制存取控制(MAC )。 ( 3 )视图机制:为不同的用户定义视图,通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。 ( 4 )审计:建立审计日志,把用户对数据库的所有操作自动记录下来放入审计日志中,DBA 可以利用审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。 ( 5 )数据加密:对存储和传输的数据进行加密处理,从而使得不知道解密算法的人无法获知数据的内容。 6 .什么是数据库中的自主存取控制方法和强制存取控制方法? 答: 自主存取控制方法:定义各个用户对不同数据对象的存取权限。当用户对数据库访问时首先检查用户的存取权限。防止不合法用户对数据库的存取。 强制存取控制方法:每一个数据对象被(强制地)标以一定的密级,每一个用户也被(强制地)授予某一个级别的许可证。系统规定只有具有某一许可证级别的用户才能存取某一个密级的数据对象。 7 .SQL语言中提供了哪些数据控制(自主存取控制)的语句?请试举几例说明它们的使用方法。 答: SQL 中的自主存取控制是通过GRANT语句和REVOKE语句来实现的。如: GRANT SELECT , INSERT ON Student TO 王平 WITH GRANT OPTION ; 就将S tudent 表的SELECT 和INSERT 权限授予了用户王平,后面的“WITH GRANT OPTION ”子句表示用户王平同时也获得了“授权”的权限,即可以把得到的权限继续授予其他用户。 REVOKE INSERT ON Student FROM 王平CASCADE ; 就将S tudent 表的INSERT 权限从用户王平处收回,选项CASCADE 表示,如果用户王平将Student 的INSERT 权限又转授给了其他用户,那么这些权限也将从其他用户处收回。 第5章数据库完整性 3 .什么是数据库的完整性约束条件?可分为哪几类? 答

oracle数据库简答题

简述表空间和数据文件之间的关系。 答:每一个数据文件都必须隶属于某个表空间,但一个表空间可以由多个数据文件组合而成。tablespace是逻辑上的概念,datafile则在物理上储存了数据库的种种对象。 概述Oracle数据库体系的物理结构。 答:Oracle数据库体系的物理结构是指数据库上实际的、可以从操作系统看到的文件,可以利用操作系统指令进行管理作业,物理存储结构组成文件如下所列:数据文件(Data File):实际存储数据的地方;在线重做日志文件(Online Redo Log File):记录曾经发生过的动作,当数据库受损时,可利用在线重做日志文件进行必要的恢复动作;控制文件(Control File):记录数据库必要的信息,以验证及维护数据库的完整性的信息;初始化参数文件(Parameter File):当数据库开启时,用来架构出Oracle内存结构的文件;密码文件(Password File):验证哪些帐号能开启、关闭Oracle数据库。 简要介绍表空间、段、区和数据块之间的关系。 答:Oracle的逻辑存储单元从小到大依次为:数据块、区、段和表空间。表空间又由许多段组成,段由多个区组成,区又由多个数据块组成。 简述Oracle实例系统中各后台进程的作用。 答:(1)DBWRn(Database Writer)的主要工作是将数据缓冲区中被改过的数据写回到数据文件里。(2)LGWR(Log Writer)主要的工作是将Redo Log Buffer里的记录写到在线重做日志文件中。(3)SMON(System Monitor)有两个主要的功能。<1>执行Instance Recovery:当数据库不正常中断后再度开启时,SMON会自动执行Instance Recovery,也就是会将在线重做日志里面的数据回写到数据文件里面。<2>收集空间:将表空间内相邻的空间进行合并的动作。 (4)PMON(Process Monitor):监视数据库的用户进程。若用户的进程不当而被中断,PMON会负责清理任何遗留下来的资源,并释放失效的进程所保留的锁,然后从Process List中移除,以终止Process ID。(5)CKPT(Checkpoint)主要负责更新数据库的最新状态,CKPT当Checkpoint完成时,会更新控制文件和数据库文件的文件头。(6)ARCn(Archiver).当Oracle 数据库设定为ARCHIVELOG Mode时,ARCn 会在Log Switch时自动将Redo Log File复制一份到指定的目录下称为归档日志文件(Archivedredologs)。 共享和专用操作模式的工作过程有什么区别? 在专用服务器操作模式中,Oracle为每个连接到数据库实例的用户进程启动一个专门的服务进程,其用户进程数与服务器进程数的比例为1:1因为在用户进程空闲期间,对应的服务器进程始终存在,数据库的效率比较低。共享服务器操作模式可以实现只运行少量的服务器进程,由少量的服务器进程为大量用户提供服务。在此模式下,数据库实例启动的同时也将启动一定数量的服务进程,在调度进程Dnnn的调度下位任意数量的用户进程提供服务。 简述oracle的初始化参数文件? 答:在传统上,Oracle在启动实例时将读取本地的一个文本文件,并利用从中获取初始化参数对实例和数据库进行设置,这个文本文件称为初始化参数文件(简称为PFILE)。 简述如何修改初始化参数文件? 答:如果要对初始化参数进行修改,必须先关闭数据库,然后在初始化参数文件中进行编辑,再重新启动数据库使修改生效。 简述启动数据库时的状态。 答:开启数据库分成4种状态。SHUTDOWN状态:数据库是关闭的。NOMOUNT状态:Instance被开启的状态,会去读取初始化参数文件。MOUNT状态:会去读取控制文件。数据库被装载。OPEN状态:读取数据文件、在线重做日志文件等,数据库开启。 简述数据库的各种关闭方式。 答:(1)正常关闭(SHUTDOWN NORMAL):不允许新的USER连进来。(2)事务关闭

数据库和表数据库表的基本操作和表级约束约束条件-实验报告

《数据库系统概论》实验报告 题目:实验一 数据库和表数据库 /表的基本操 作和表级约束约束条件 姓名 班级 学号 日期 2010.9.29 一. 实验内容和步骤结果 1.在Student 数据库中,利用图形用户界面,创建一个选修了数据库课程并且是1986年出生的学生的视图,视图中包括学号,性别,成绩这三个信息: 2.用两种不同的SQL 语句创建课本128页第11题中要求的视图(视图名:V_SPJ ) 方法一: CREATE VIEW V_SPJ AS SELECT SNO ,PNO ,QTY FROM SPJ WHERE JNO in( SELECT JNO FROM J 表 WHERE JNAME ='三建')

方法二: CREATE VIEW V_SPJ AS SELECT SNO,PNO,QTY FROM SPJ,J表 WHERE SPJ.JNO=J表.JNO AND JNAME='三建'

3.用SQL语句完成课本128页第11题中对视图V_SPJ的查询(1) SELECT PNO,QTY FROM V_SPJ

(2) SELECT PNO,QTY FROM V_SPJ WHERE SNO='S1'

4.用T-SQL语句操作视图的数据。(15分,每题5分) (1) 给视图V_SPJ中增加一条数据(基本表中有插入的数据即可)。 INSERT INTO V_SPJ VALUES('S0','P0','100')

(2)修改视图V_SPJ中的任意一条数据的供应数量。UPDATE V_SPJ SET QTY=10 WHERE SNO='S1'AND PNO='P1'

相关主题
文本预览
相关文档 最新文档