第5章 索引与数据完整性[60页]
0005 数据库完整性
5.3 用户定义的完整性
用户定义的完整性
not null create table student ( sno char( 5 ), sname varchar( 20 ) not null, ssex char( 2 ), sage smallint, sdept varchar(15), constraint PK_student_sno primary key( sno ) )
参照完整性检查和违约处理
insert into t1 values(1) insert into t1 values(1) insert into t1 values(2) insert into t1 values(3) insert into t2 values(1) insert into t2 values(1) insert into t2 values(2) insert into t2 values(3) insert into t2 values(4) 拒绝
5.2 参照完整性
参照完整性
参照完整性规则 若属性 ( 或属性组 ) F是基本关系 的外 若属性(或属性组) 是基本关系 是基本关系R的外 码它与基本关系S的主码 相对应( 的主码K 码它与基本关系 的主码 s相对应( 基本 关系R和 可能是相同的关系 可能是相同的关系) 则对于R 关系 和S可能是相同的关系),则对于 中每个元组在F上的值必须为 上的值必须为: 中每个元组在 上的值必须为: 或者取空值 或者取空值 或者等于 中某个元组的主码值。 或者等于S中某个元组的主码值 或者等于 中某个元组的主码值。
实体完整性定义 创建表的时候用 创建表的时候用primary key定义 定义
示例:创建 示例:创建student表,将属性 定义为主码 表 将属性sno定义为主码 create table student ( sno char(5),constraint PK_stu_sno primary key, sname varchar(20) not null, ssex char(2), sage smallint, sdept varchar(20), ) onstraint PK_stu_sno primary key(sno) c
第五章 索引与数据完整性约束
第5章索引与数据完整性约束一、索引的用途与概念1.MySQL中访问表中的行,最常用的是顺序访问和索引访问。
2.索引的概念:根据表中一列或若干列按照一定顺序建立的列值与记录之间的对应关系表。
(存储在索引文件中)像不像图书的目录?3.索引的用途:在表的某些列上创建了索引之后查找数据时可以直接根据该列上的索引找到对应行的位置,从而加快了查找速度。
4.一个表中可以创建多个索引,基于一个字段也可以创建多个索引。
二、索引的分类1.B树索引:最常用a)普通索引i.只包含索引关键字indexii.对建立索引的列没有唯一性要求b)唯一性索引i.关键字uniqueii.创建索引的列,或列的组合值必须唯一c)主键索引i.关键字primary keyii.只能在创建主键约束时自动创建d)全文索引i.关键字fulltextii.只能在varchar或text类型的列上创建iii.对于大规模的数据集,通过alter table或create table命令创建全文索引要比把记录插入带有全文索引的空表更快。
2.HASH(哈希)索引:速度较快a)不需要建立树结构,但是所有的值都保存在一个列表中,这个列表指向相关页和行。
三、创建索引1.create index语句创建索引a)格式:create [unique|fulltext|spatial] index 索引名[using btree|hash]on table_name(索引列[(length)] [asc|desc] )其中:using子句表示索引的类型,默认为btree; length表示使用索引列的前多少个字符创建索引,这在索引列值较长的情况下比较有用。
如在blob或text列上创建索引。
b)例题:例5.1 create index st on student(stuname(4) asc);查看索引的命令: show index from 表名例如:show index from student;例5.2 创建复合索引。
索引默认值与数据完整性
9
6.1.3
索引的创建
索引选项设置:
PAD_INDEX FILLFACTOR = fillfactor IGNORE_DUP_KEY DROP_EXISTING STATISTICS_NORECOMPUTE SORT_IN_TEMPDB
10
6.1.3
索引的创建
创建索引需要注意的两点:
只要满足索引条件,就可以在计算列上创建索 引,但计算列必须具有确定性(精确),且不 text 能包含text等数据类型的列。 可以在视图上创建索引,索引视图能自动反映 出创建索引后对基表数据所作的修改。
21
6.2.2 默认值对象的定义、使用与删除 默认值对象的定义、
3. 默认值对象的删除
如果要删除一个默认值对象,首先应解除默认值对象与用户定义 类型及表字段的绑定关系,然后才能删除该默认值对象。 (1) 利用sp_unbindefault解除绑定关系 语法格式:
sp_unbindefault [@objname =] 'object_name' [, [@futureonly =] 'futureonly_flag']
XS表设计器界面 表设计器界面
7
6.1.3
索引的创建
(5) 在“索引/键”属性页点击“新建”按钮 点击“ 点击 新建”按钮,然后,系统将自 动创建新索引的名称,用户也可自己定义索引名,在“列名”下选 择要创建索引的列,在此选择“姓名”这一列,最多可选择16 列。
8
6.1.3
索引的创建
2.利用SQL命令建立索引 .利用 命令建立索引
索引、默认值与数据完整性
本章主要内容
索引 通过索引提高查询速度,类似于书的目录 默认值 方便用户的使用 数据完整性 数据库中的数据在逻辑上的一致性和准确性。 主要包括域完整性、实体完整性和参照完整 性三个方面。
07 索引与数据完整性
索引的分类
在SQL Server 2008中提供的索引类型主要有以下几类:聚集索 引、非聚集索引、唯一索引、包含性列索引、索引视图、全文索引 、空间索引、筛选索引、和XML索引。 按照存储结构的不同,可以将索引分为两类:聚集索引和非聚集索 引。
索引的操作
索引创建的操作步骤如下: ( 1 ) 启 动 SQL Server Management Studio , 并 连 接 到 SQL Server 2008数据库。
索引与数据完整性
本讲大纲: 1、索引的概念 2、索引的优缺点 3、索引的分类 4、索引的操作 5、索引的分析与维护 6、全文索引
7、数据完整性
索引的概念
索引是为了加速对表中数据行的检索而创建的一种分散存储 结构。它是针对一个表而建立的,每个索引页面中的行都含有逻 辑指针,指向数据表中的物理位置,以便加速Байду номын сангаас索物理数据。因 此,对表中的列是否创建索引,将对查询速度有很大的影响。一 个表的存储是由两部分组成的,一部分用来存放表的数据页,另 一部分存放索引页。从中找到所需数据的指针,然后直接通过该 指针从数据页面中读取数据,从而提高查询速度。
数据完整性
数据完整性是SQL Server用于保证数据库中数据一致性的一种机制 ,防止非法数据存入数据库。具体地数据完整性主要体现在以下几 点。 数据类型准确无误。 数据取值符合规定的范围。 多个数据表之间的数据不存在冲突。
索引的分析与维护
索引的分析: 使用SHOWPLAN语句 显示查询语句的执行信息,包含查询过程中连接表时所采取的每个 步骤以及选择哪个索引。 使用STATISTICS IO语句 STATISTICS IO语句表示使 SQL Server 显示有关由 Transact-SQL 语句生成的磁盘活动量的信息。 索引的维护: 使用DBCC SHOWCONTIG语句 显示指定表的数据和索引的碎片信息。当对表进行大量的修改或添 加数据后,应该执行此语句来查看有无碎片。 使用DBCC DBREINDEX语句 DBCC DBREINDEX表示对指定数据库中的表重新生成一个或多个索 引。
第5章 第一讲 数据完整性
第五章 数据库完整性
5.1 实体完整性 5.2 参照完整性 5.3 用户定义的完整性 5.4 完整性约束命名字句 5.5 触发器 5.6 小结
An Introduction to Database System
5.1 实体完整性
?
5.1.1 实体完整性定义
关系数据库的实体完整性的定义,有两种方式: 关系数据库的实体完整性的定义,有两种方式: 创建表时: 多属性构成主键问题】 ① 创建表时:Primary Key【单/多属性构成主键问题】 【 多属性构成主键问题 ② 修改表定义时:添加Primary Key 约束 修改表定义时:添加 【先前表定义时需将该字段设置为非空】 先前表定义时需将该字段设置为非空】 具体实例请参照: 具体实例请参照:第三章 数据定义部分的教学内容
An Introduction to Database System
5.1 实体完整性
5.1.2 实体完整性检查和违约处理
如何保证? 如何保证?
核查记录主码值是否唯一的方法:全表扫描, 核查记录主码值是否唯一的方法:全表扫描,即依次判 断表中的每一条记录的主码值是否与即将插入的记录主码 值重复。(教材P153页) 值重复。(教材 。(教材 页 全表扫描一般情况是十分耗时, 全表扫描一般情况是十分耗时,尤其在数据记录量较多 的情况下。为了避免全表扫描, 的情况下。为了避免全表扫描,RDBMS核心一般都在主 核心一般都在主 码字段自动建立 树的聚簇索引 从而提高检查效率。 码字段自动建立B+树的聚簇索引,从而提高检查效率。 自动建立 树的聚簇索引,
An Introduction to Database System
数据库完整性
为维护数据库的完整性, 为维护数据库的完整性,DBMS必须 必须
第5章 索引与数据完整性
5.1 索 引
图5.2 位图索引
5.1.1索引的分类 在下列情况中,位图索引比B*树索引更有利: 当表包含数百万行且键列的基数很低(即该列中重复的值很多)时; 当查询经常使用涉及OR运算符的多个WHERE条件组合时; 当键列上存在只读或很少的更新操作时。
表5-1 B树索引与位图中维护索引 在OEM中维护索引的操作,除了一些特殊的信息不能再修改,其他与创建索引的操作相 同。 在如图5.3所示的界面中,选择要维护的索引,单击“编辑”按钮,进入“编辑索引”界 面, 如图5.10所示。在各个选项页面上重新指定相应的设置,确认无误后,单击“应用”按钮, 完成修改。
5.1 索 引
B*树操作更适合索引动态表的联机事务处理环境,而位图索引更适合在大型静态 表上使用复杂查询的数据仓库环境。
5.1.2 使用索引的原则
创建索引应考虑的问题: (1)索引能够提高查询性能并降低DML操作速度。始终使表所需的索引数保持最少。 (2)将索引放在一个单独的表空间中,不要放在有撤销段、临时段和表的表空间中。 (3)对大型索引而言,避免生成重做日志可显著提高性能。可以考虑使用 NOLOGGING子句创建大型索引。 (4)由于索引项比索引行小,索引每个索引块中可能包含更多的项。因此,INITRANS 参数在索引中通常应设置的比在对应的表中高。 当用户考虑在表中使用索引时,应遵循下列一些基本的原则: (1) 在表中插入数据后创建索引 (2) 索引正确的表和列 (3) 合理安排索引列——列的排序,将最常用的列放到前面 (4) 限制表中索引的数量 (5) 指定索引数据块空间的使用 (6) 根据索引大小设置存储参数
5.1.3 创建索引
创建索引有三种方法:随数据库表创建、使用Oracle 10g管理控制台工具单独创建和使 用SQL命令创建索引。 1. 随数据库表一起创建索引 在创建数据库表时,如果表中包含有唯一关键字或主关键字,则Oracle 10g自动为这两 种关键字所包含的列建立索引。如果不特别指定,系统将默认为该索引定义一个名字。表 建立之后,实际上就是在表XS的列XH上建立了一个索引,并赋予名称PK_XH。如图5.3所 示。这种方法创建的索引是非排序索引,既正向索引,以B*树形式存储。
第5章 索引与数据完整性
SQL Server 2000实用教程
2012年7月29日
5.2 数据完整性
5.2.1 域完整性 域完整性也称为列完整性,是指定一个数 据集对某个列是否有效和确定是否允许为空值。 通常使用有效性检查强制域完整性,也可以通 过限定列中允许的数据类型、格式或可能值的 范围来强制数据完整性。
SQL Server 2000实用教程
SQL Server 2000实用教程 2012年7月29日
5.1 索引
5.1.1 索引的概念 1. 索引的概念 索引是一个单独的,物理的数据库结构。它由某个表中 的一列或者若干列的值,以及这些值的记录在数据表中存 储位置的物理地址所组成。 当SQL Server进行数据查询时,查询优化器会自动 计算现有的几种查询方案,通过方案的开销大小和速度快 慢决定方案是否被执行。如果使用索引查找的速度不如直 接扫描表格速度快时,SQL Server会使用直接扫描表格的 方法。建立不能被SQL Server使用的索引会给系统增加负 担,索引要占用存储空间,而且为了自动维护索引,在插 入、删除或者更新数据的时候,SQL Server还要花费额外 的操作来维护索引的有效性。
SQL Server 2000实用教程
2012年7月29日
5.1 索引
但是,建立索引也会消耗硬盘空间并招致开销和维 护 成 本 。 当 在 建 立 索 引 的 列 上 修 改 数 据 时 , SQL Server将会更新相关的索引,从而花费额外的时间和资 源。因此,不要创建不经常使用的索引,不要在含有大 量重复数据的列上创建索引,也不要在定义为 text、 ntext 或者 image 数据类型的列上创建索引。 建立索引应该遵循以下原则: · 在主键上创建索引 · 在经常需要检索的字段上创建索引 · 在外键上创建索引 · · 在经常要排序的列上创建索引
第5章 索引与数据完整性约束(gai)
第5章 索引与数据完整性约束
5.1 索引 5.2 数据完整性约束
5.1 索引
5.1.1 索引的分类
CREATE TABLE XS_KC ( 学号 CHAR(6) NOT NULL, 课程号 CHAR(3) NOT NULL, 成绩 TINYINT(1), 学分 TINYINT(1), PRIMARY KEY(学号,课程号), INDEX CJ(成绩) );
练习:用 alter table 语句创建前面练习1至 练习4 中索引
练习:用 create table 语句创建前面练习1至 练习 4 中索引
5.1.3 删除索引
1. 使用DROP INDEX语句删除索引 语法格式:
DROP INDEX index_name ON tbl_name
这个语句语法非常简单,index_name为要删除的索引名,tb1_name为索引所在的 表。 【例5.6】 删除XS表上的XS_XH索引。
● ALTER TABLE XS ADD INDEX XS_XM USING BTREE (姓名);
Байду номын сангаас
【例5.4】 以XS表为例(假设XS表中主键未定),创建这样的索引,以加速表 的检索速度:
ALTER TABLE XS ADD PRIMARY KEY(学号), ADD INDEX mark(出生日期,性别);
练习1:根据yggl数据库的employees表中的 departmentid列建立一个升序索引depart_ind。 练习2:根据yggl数据库的employees表的name列 和address列上建立一个复合索引ad_ind。
数据库系统概论 课件 第05章_数据库完整性
列值非空(NOT NULL约束) 列值唯一(UNIQUE约束) 检查列值是否满足一个布尔表达式(CHECK约束)
SQL Server 实现用户定义数据完整性的主要方法 有:约束、默认、规则、自定义数据类型和触发器
1、不允许取空值
DB
例5 在定义“学生”表时,说明学号Sno为主键,姓
数据库系统原理
DB
Principles of Database System
第五章 数据库完整性
第五章
DB
数据库完整性
数据库的完整性(Integrity)
数据的正确性、有效性和相容性
防止不合语义的数据进入数据库
例:学生的年龄必须是整数,取值范围为14-35;
学生的性别只能是男或女; 学生的学号一定是唯一的; 学生所在的系必须是学校开设的系;
DB
FOREIGN KEY(<列名>) REFERENCES <表名> [(<列名>)] [ ON DELETE <参照动作> ] [ ON UPDATE <参照动作> ] 其中 第一个“列名”是外部关键字 第二个“列名”是被参照表中的主键或候选键 。
参照动作
DB
NO ACTION(拒绝)
CASCADE(级联)
FOREIGN KEY(Sno) REFERENCES Student(Sno),
FOREIGN KEY(Cno) REFERENCES Course(Cno)
);
5.2.2 参照完整性检查和违约处理
DB
一个参照完整性将两个表的相应元组联 系起来了
对被参照表和参照表进行增删改操作时
有可能破坏参照完整性 因此,必须进行检查
数据库系统概论第五章数据库的完整性PPT课件
02 数据完整性的实现方式
实体完整性
实体完整性定义
确保表中每条记录的唯一性,通常通过主键约 束来实现。
主键约束
主键是表中的一个或多个字段的组合,其值唯 一标识表中的每条记录。
主键的作用
确保表中数据的唯一性,防止重复记录的出现。
数据库完整性技术面临的挑战和机遇
数据量爆炸式增长
01
随着大数据时代的来临,数据库完整性面临数据量爆炸式增长
带来的存储、处理和管理挑战。
法规遵从与隐私保护
02
随着法规对数据保护的要求日益严格,数据库完整性需满足法
规遵从和隐私保护的需求。
技术创新与市场机遇
03
数据库完整性技术的发展将带来新的市场机遇,推动相关产业
参照完整性定义
维护数据库表之间的关系,确保引用数据的 一致性和准确性。
级联更新和删除
当父表中的数据发生变化时,自动更新或删 除子表中的相关数据。
外键约束
通过在子表中设置外键来引用父表的主键, 确保子表中数据与父表数据的一致性。
更新和删除规则
定义当父表中的数据发生变化时,如何处理 子表中的相关数据。
视图完整性
THANKS FOR WATCHING
感谢您的观看
视图完整性定义
基于一个或多个表的查询结果 集创建视图,并确保该结果集
的完整性。
视图的作用
提供了一个虚拟表,可以基于 现有表的数据进行查询和操作 。
视图的限制
通过在视图上定义约束来确保 数据的完整性和准确性。
视图与数据操作
对视图进行查询、更新、插入 和删除操作时,必须遵守视图
第5章__MySQL索引与数据完整性约束 - 副本
CONSTRAINT关键字用来指定完整性约束的名字。语法格式为:
CONSTRAINT [symbol] 【例5.18】 创建与例5.8中相同的XS1表,并为主键命名。 CREATE TABLE XS1 ( 学号 varchar(6) NULL, 姓名 varchar(8) NOT NULL, 出生日期 datetime NULL
ON UPDATE RESTRICT
); 这意味着,对于XS1表中的每一个学号,都执行一次检查,看这个号码是否已经出现在 XS表的学号列(主键)中。如果情况不是这样,用户或应用程序会接收到一条出错消息,并 且更新被拒绝。这也适用于使用UPDATE语句更新XS1表中的学号列。
5.2.3 参照完整性约束
课程号
学分 );
varchar(3) ,
PRIMARY KEY (学号, 课程号, 毕业日期) 如果作为主键的一部分的一个列没有定义为NOT NULL,MySQL就自动把这个列定义 为NOT NULL。实际上,在前面的例5.8中,可以忽略姓名列中的NOT NULL声明,但是为 了清楚起见,最好包含这个空指定。
PRIMARY KEY约束时,MySQL为主键列创建唯一性索引,实现数据的唯一性,在
查询中使用主键时,该索引可用来对数据进行快速访问。如果 PRIMARY KEY 约束是 由多列组合定义的,则某一列的值可以重复,但 PRIMARY KEY 约束定义中所有列的 组合值必须唯一。 可以用两种方式定义主键:作为列或表的完整性约束。作为列的完整性约束时,只 需在列定义的时候加上关键字PRIMARY KEY。作为表的完整性约束时,需要在语句 最后加上一条PRIMARY KEY(col_name,…)语句。
5.2.2 替代键约束
在MySQL中替代键和主键的区别主要有以下几点。 (1)一个数据表只能创建一个主键。但一个表可以有若干个UNIQUE键,并且它们 甚至可以重合,例如,在C1和C2列上定义了一个替代键,并且在C2和C3上定义了另一 个替代键,这两个替代键在C2列上重合了,而MySQL允许这样。 (2)主键字段的值不允许为NULL,而UNIQUE字段的值可取NULL,但是必须使
索引及数据完整性
索引索引是由指针构成的文件,这些指针逻辑上按照索引关键字值进行排序.索引文件和表的.DBF文件分别存储,并且不改变表中记录的物理顺序.提高查询的速度一:索引分为主索引、候选索引、唯一索引,普通索引。
1:主索引( 学号,准考证,身份证号,等编号……)在指定字段或表达式中不允许出现重复值的索引。
建立主索引的字段可以看作是主关键字,一个表只能有一个主关键字,所以一个表只能创建一个主索引。
2:候选索引候选索引和主索引具有相同的特性,建立候选索引的字段可以看作是候选关键字,所以一个表可以建立多个候选索引。
3:唯一索引 UNIQUE唯一索引是为了保持同早期版本的兼容性,它的“唯一性”是指索引项的唯一,而不是字段值的唯一。
具有重复索引字段只保持最前面的一个在目标文件中。
保留记录号最小的1条记录4:普通索引只是对表相关的关键字段进行排序在一个表中可以建立多个普通索引、多个唯一索引、多个候选索引,但只能建立一个主索引。
从结构上分:单索引IDXINDEX ON <字段名> TO <索引文件名>USE 职工INDEX ON 工资 TO GM结构复合索引索引CDX多个索引可以创建在一个索引文件中,这种索引叫复合索引Index on <表达式>tag <标识名>[ascending][descending] [unique/candidate]UNIQUE 唯一索引Candidate 候选索引省略以上普通索引A:索引文件的主文件名与表名同名,扩展名为CDXB:随表文件的打开而打开.注:主索引不能用命令创建.设置当前索引set order to [n]/<索引标识名>N>=0 0原文件数据完整性在数据库中数据完整性是指保证数据正确的特性,数据完整性一般包括实体完整性、域完整性和参照完整性。
一:实体完整性与主关键字实体完整性是保证表中记录惟一,即在一个表中不允许有重复的记录。
第5章 数据完整性
第5章数据完整性【学习目标】Microsoft SQL Server 2005系统提供了一系列保证数据完整性的方法和机制,例如约束、默认值和规则等。
其中约束技术是应用最为广泛的保证数据完整性的方法。
本章将主要介绍有关数据库完整性的技术与方法。
本章学习要点:◆数据完整性的基本概念与类型◆约束的概念与类型◆默认值的概念与类型◆规则的概念与类型【学习导航】数据完整性是指数据库系统中数据在逻辑上的一致性和准确性,是保证数据库中数据质量的一种重要手段,是数据库设计好坏的一项重要指标,同时也是现代数据库系统的一个重要特征。
我们都有在网上注册帐户的经历,在注册信息的时候,我们经常会遇到用户名已经存在、密码少于规定的长度、电子邮件必填、出生日期有效、身份证号码是否正确等一系列的限制,实际上这些限制就是保证数据完整性的一些手段,主要的目的就是为了保证用户所填写的内容正确、有效。
本章主要内容见图5-1所示的学习导航。
图5-1 本章学习导航5.1 概述当对数据库进行一系列的操作后,如添加、修改、删除后,数据可能会出现被破坏或相关数据不一致的情况,那么如何防止和解决这些问题的出现呢?这不仅仅需要管理人员和操纵人员的认真和负责,更需要建立一个保障机制,要么防止这些问题发生,要么发生这些问题时可以及时地发现。
数据完整性就是解决这些问题的一种机制。
数据完整性就是指存储在数据库中的数据的一致性和准确性。
在评价数据库的设计时,数据完整性是数据库设计好坏的一项重要指标。
根据数据完整性机制所作用的数据对象和范围不同,数据完整性可以分为实体完整性、域完整性、参照完整性和用户定义完整性4种。
1.实体完整性实体完整性,也可以称为行完整性。
实体是指表中的记录,一个实体就是表中的一条记录。
实体完整性要求在表中不能存在完全相同的记录,而且要求每条记录都要具有一个唯一的标识符,这种标识符一般称为主键值。
这样就可以保证数据所代表的任何事物都不存在重复、可以区分。
SQL实验六索引和数据完整性的使用
SQL实验六索引和数据完整性的使用索引是一种特殊的数据结构,它能够提高数据库的查询和性能。
索引可以加快数据的检索速度,减少数据库的IO操作,提高系统的响应速度。
在实际的数据库操作中,索引的使用是非常重要的,可以大大提高数据库的查询效率。
索引的使用可以分为两种情况:一种是在数据库表中创建索引,比如在一些字段上创建索引;另一种是在查询语句中使用索引,比如通过WHERE子句中的条件来使用索引。
在创建索引的时候,我们需要考虑到几个因素:索引的字段选择、索引的类型、索引的存储方式等。
索引的字段选择是非常重要的,一般来说,我们应该选择那些经常被查询的字段作为索引字段,这样可以提高查询的速度。
同时,我们还需要考虑到索引的唯一性,如果一个字段的值是唯一的,那么我们可以将其作为主键索引来使用,这样可以加快查询速度。
索引的类型有很多种,常见的有B树索引、哈希索引、全文索引等。
不同的索引类型适用于不同的场景,我们需要根据具体的需求来选择合适的索引类型。
索引的存储方式也有很多种,一般来说,索引可以存储在内存中,也可以存储在磁盘中。
如果数据量比较大,我们可以将索引存储在磁盘中,这样可以节省内存资源。
但是需要注意的是,将索引存储在磁盘中会增加IO操作的时间,降低查询速度。
在查询语句中使用索引也是非常重要的。
通过在WHERE子句中增加索引字段的条件,可以加快查询速度。
同时,我们还可以通过ORDERBY子句来对查询结果进行排序,这样可以进一步提高查询效率。
除了索引之外,数据完整性也是数据库设计中非常重要的一部分。
数据完整性保证了数据库中数据的一致性和准确性,可以防止数据的丢失和损坏。
数据完整性的实现可以通过主键约束、外键约束、唯一约束和检查约束等手段来实现。
主键约束可以保证表中每一行的数据都是唯一的,可以防止数据的重复和错误。
外键约束可以保证表与表之间的关系的有效性,可以防止数据的错误和不一致。
唯一约束可以保证一些字段的值在表中是唯一的,可以防止数据的重复和错误。
索引与数据完整性.
6 索引与数据完整性
12
6.3.2域完整性的实现
CHECK约束的定义与删除
• 通过企业管理器创建与删除CHECK约束 • 利用SQL语句在修改表时创建CHECK约束 【 例 】 通 过 修 改 XSCJ 数 据 库 的 XS_KC 表 , 增 加 成 绩 字 段 的 CHECK约 束。 USE XSCJ ALTER TABLE XS_KC ADD CONSTRAINT cj_constraint CHECK (成绩>=0 and 成绩<=100) • 利用SQL语句删除CHECK约束 语法格式: ALTER TABLE table_name DROP CONSTRAINT check_name 参数含义: 在table_name指定的表中,删除名为check_name的约束。
6 索引与数据完整性
8
6.2.2默认值对象的定义、使用与删除
通过SQL语句定义和绑定DEFAULT默认值对象
• 应用举例 【例】在XSCJ数据库中定义名为 birthday_date 的数据类型,然后 定 义默认值对象day 并将其绑定到用户定义的数据类型 birthday_date 中。 --定义数据类型birthday_date USE XSCJ EXEC sp_addtype birthday_date, 'datetime', 'NULL' Go --定义day缺省值对象 CREATE DEFAULT day AS ‘1960,00,00’ -- 将缺省值对象day绑定到birthday_date数据类型 USE XSCJ EXEC sp_bindefault ' day ', ' birthday_date '
Oracle数据库管理与开发第5章 索引与数据完整性
禁用约束
2.禁用已经存在的约束 对于已存在的约束,则可以使用ALTER TABLE…DISABLE CONSTRAINT 语句禁止该约束。
禁用employees_temp表中的约束temp_departid_fk
SQL> alter table employees_temp disable constraint temp_departid_fk;
上机指导
(2)在EMPLOYEES_TEMP表和DEPARTMENTS_TEMP表之间创建外键约束,并指定外键约束的引用类型 为ON DELETE CASDE,代码如下: SQL> alter table employees_temp add constraint temp_departid_fk2 foreign key(department_id) references departments_temp on delete cascade; 表已更改。
创建索引
在SQL Developer中创建索引
创建索引
使用SQL命令创建索引
1.创建B树索引
A001 B001
A001
A004
B001
B004
A001+ROWID A002+ROWID A003+ROWID
A004+ROWID A005+ROWID A006+ROWID
B001+ROWID B002+ROWID B003+ROWID
级联设置
通过ON DELETE SET NULL选项将子表数据级联设置为null,当父表 数据删除时,子表的数据可以不用删除,并且将父表关联字段的内容设 置为null。
第5章索引、关系、完整性
5.2 数据库表的属性设置
2.设置字段标题 在设计表结构时,为了便于操作,或考虑版本升级时的中、英文兼容问 题,经常根据字段含义将字段名“缩写”。但“缩写”的字段名不易阅读理 解。为了解决这个问题,可以给字段建立标题,在“浏览”窗口中或表单上 显示字段名位置处显示设置的标题信息,但不可以作为字段名使用。可以把 字段标题理解为对字段名的注释。 实例53 给“学生基本情况”表的“学习计划”字段设置标题“近两年的 学习计划”。 (1)打开“学生基本情况”表的表设计器,如图5-4所示。选中“学习计 划”字段。 (2)在“显示”栏的“标题”文本框中输入“近两年的学习计划”,如 图5-6所示。
5.2 数据库表的属性设置
图5-6 设置字段标题
5.2 数据库表的属性设置
(3)单击“确定”按钮即可。 此后再浏览“学生基本情况”表时,“学习计划”字段名处均显示“近 两年的学习计划”。 3.设置字段默认值 字段默认值是指当添加新记录时,字段值自动设置为由用户预先为该字 段设置的值。此设置通常用于该字段大多数记录的值相同的情况下,可以减 少重复输入的麻烦。默认值可以是常数,也可以是表达式,只要其数据类型 与字段类型一致即可。 实例54 给“学生基本情况”表的“性别”字段设置默认值为“男”, “报名时间”字段设置默认值为报名当天的日期。 (1)打开“学生基本情况”表的表设计器,如图5-4所示。选中“性别” 字段。 (2)在“字段有效性”栏的“默认值”文本框中输入“男”,如图5-7所 示。
5.1 数据库的基本操作
图5-3 显示数据库的信息
5.1 数据库的基本操作
5.1.3 修改数据库
修改数据库是维护数据库的一项重要任务。 在“命令”窗口中输入修改数据库的命令: MODIFY DATABASE [<数据库名> | ?] 其中,<数据库名>用于指定被修改数据库的位置、文件名。若不指定文件名或 在命令后加?,则会弹出“打开”窗口。 实例51 修改“招生管理”数据库。 在命令窗口中输入: modify database 招生管理 此时,将打开“数据库设计器-招生管理”窗口。同时Visual FoxPro的菜单项中 多了“数据库”,“数据库设计器”工具栏也自动打开。对数据库的修改是借 助“数据库”菜单项和“数据库设计器”工具栏实现的。在此可以根据需要向 数据库中添加、移去、删除表或视图,可以根据需要对表或视图浏览、修改, 还可以建立、编辑和删除表之间的关系。 修改数据库也可以在项目管理器中实现。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
01 索引的分类
索引的分类
(1)索引按存储方法分类,可以分为两类:B*树索引和位图索引。 B*树索引的存储结构类似图书的索引结构,有分支和叶两种类型的存储数据块,分支块相当于图书的大 目录,叶块相当于索引到的具体的书页。Oracle用B*树(B*-tree)机制存储索引条目,以保证用最短路 径访问键值。默认情况下大多使用B*树索引,该索引就是通常所说的唯一索引、逆序索引等。 位图索引主要用来节省空间,减少Oracle对数据块的访问。它采用位图偏移方式来与表的行ID号对应。 采用位图索引一般是在重复值太多的表字段情况下。位图索引在实际密集型OLTP(数据事务处理)中 用得比较少,因为OLTP会对表进行大量的删除、修改和新建操作,Oracle每次进行操作都会对要操作 的数据块加锁,所以多人操作时很容易产生数据块锁、等待、甚至死锁现象。在OLAP(数据分析处理) 中应用位图索引有优势,因为OLAP中大部分是对数据库的查询操作,而且一般采用数据仓库技术,所 以大量数据采用位图索引时节省空间比较明显。当创建表的命令中包含有唯一性关键字时,不能创建位 图索引。创建全局分区索引时也不能选用位图索引。
索引的分类
(2)索引按功能和索引对象可分为以下六种类型。
唯一索引。唯一索引意味着不会有两行记录相同的索引键值。唯一索引表中的记录没有RowID,所以不能再对 ① 其建立其他索引。在Oracle 11g中,要建立唯一索引,必须在表中设置主关键字,建立了唯一索引的表只按照
该唯一索引结构排序。
② 非唯一索引。不对索引列的值进行唯一性限制的称为非唯一索引。
必须在要索引的表上具有INDEX权限。
必须具有CREATE ANY INDEX权限。
语法格式为:
CREATE [UNIQUE∣BITMAP] INDEX
/*索引类型*/
[<用户方案名>.]<索引名>
ON <表名>(<列名> | <列名表达式> [ASC∣DESC] [,…n])
[LOGGING | NOLOGGING]
③ 分区索引。所谓分区索引是指索引可以分散地存在于多个不同的表空间中,其优点是可以提高数据查询的效率。
④ 未排序索引。未排序索引也称为正向索引。由于Oracle 11g数据库中的行是按升序排序的,因此创建索引时不 必指定对其排序而使用默认的顺序。
⑤ 逆序索引。逆序索引也称为反向索引。该索引同样保持索引列按顺序排列,但是颠倒已索引的每列的字节。
创建索引
(3)所有选项设置完后单击“确定”按钮完成索引的创建,索引创建完后单击XSB表,在“索引”选项页可以看到 新创建的索引XSB_NAME_INDEX,如图5.3所示。
创建索引
2.以命令方式创建索引
使用SQL命令可以灵活方便地创建索引。在使用SQL命令创建索引时,必须满足下列条件之一。
索引的表或簇必须在自己的模式中。
(1)
合理安排索引列。在CREATE INDEX 语句中,列的排序会影响查询的性能,
通常将最常用的列放在前面。创建一 (3)
个索引来提高多列查询时,应该清楚 地了解这个多列索引对什么列的存取 有效、对什么列的存取无效。
索引正确的表和列。如果经常检
索的内容仅为包含大量数据的表
(2) 中少于15%的行,就需要创建索引。
第5章 索引与数据完整性
索引
索引
在Oracle 11g中,索引是一种供服务器在表中快速查找一行的数据库结构。在数据库中建立索引主要有以下作 用:
(1)快速存取数据;
(3)实现表与表之间的参 照完整性;
(2)既可以改善数据库性 能,又可以保证列值的唯 一性;
(4)在使用ORDER BY、 GROUP BY子句进行数据检索 时,利用索引可以减少排序 和分组的时间。
⑥
பைடு நூலகம்
基于函数的索引。基于函数的索引是指索引中的一列或者多列是一个函数或者表达式,索引根据函数或者表 达式计算索引列的值。可以将基于函数的索引创建成为位图索引。
02 使用索引的原则
使用索引的原则
在表中插入数据后创建索引。在表中插入数 据后,创建索引效率将更高。因为如果在装 载数据之前创建索引,那么插入每行时 Oracle都必须更改索引。
(4)
根据索引大小设置存储参数。创建
索引之前应先估计索引的大小,以 便更好地规划和管理磁盘空间。单
(6)
个索引项的最大值大约是数据块大
小的一半。
指定索引数据块空间。创建索引时,索
(5)
引的数据块是用表中现存的值填充的, 直到达到PCTREE为止。因此,如果打算
将许多行插入到被索引的表中,PCTREE
为了改善多个表的相互关系,常
常使用索引列进行关系连接。
使用索引的原则
例如,当在A、B、C三列上创建索引时,实际得到的顺序如下: A AB ABC 所以,可以获得A列的索引、A和B列结合的索引以及A、B、C三列结合的索引。不能得到的顺序如下: B BC C
使用索引的原则
限制表中索引的数量。尽管表可以有任意数 量的索引,但是索引越多,在修改表中的数 据时对索引做出相应更改的工作量也越大, 效率也就越低。因此,应及时删除目前不用 的索引。
创建索引
说明:
(1)
UNIQUE:指定索引所 基于的列(或多列)值 必须唯一。默认的索引 是非唯一索引。Oracle 建议不要在表上显式定 义UNIQUE索引。
/*指定是否创建相应的日志记录*/
[COMPUTE STATISTICS]
/*生成统计信息*/
[COMPAESS | NOCOMPRESS]
/*对复合索引进行压缩*/
[TABLESPACE <表空间名>]
/*索引所属表空间*/
[SORT | NOSORT]
/*指定是否对表进行排序*/
[REVERSE]
就应设置得大一点。不能给索引指定
PCTUSED。
03 创建索引
1.以界面方式创建索引 2.以命令方式创建索引
创建索引
1.以界面方式创建索引
以在XSB表的“姓名”列创建索引为例,使用SQL Developer创建索引的操作过程如下。 (1)启动SQL Developer,展开连接myorcl,右击要创建索引的XSB表,选择“索引”菜单下的“创建索引”子菜 单项,如图5.1所示。 (2)在弹出的“创建索引”窗口中创建索引,如图5.2所示。