Informix Dynamic Server 1150 基础考试 555 认证准备第 4 部分 检查数据库对象.docx

上传人:b****2 文档编号:3231899 上传时间:2023-05-05 格式:DOCX 页数:44 大小:42.82KB
下载 相关 举报
Informix Dynamic Server 1150 基础考试 555 认证准备第 4 部分 检查数据库对象.docx_第1页
第1页 / 共44页
Informix Dynamic Server 1150 基础考试 555 认证准备第 4 部分 检查数据库对象.docx_第2页
第2页 / 共44页
Informix Dynamic Server 1150 基础考试 555 认证准备第 4 部分 检查数据库对象.docx_第3页
第3页 / 共44页
Informix Dynamic Server 1150 基础考试 555 认证准备第 4 部分 检查数据库对象.docx_第4页
第4页 / 共44页
Informix Dynamic Server 1150 基础考试 555 认证准备第 4 部分 检查数据库对象.docx_第5页
第5页 / 共44页
Informix Dynamic Server 1150 基础考试 555 认证准备第 4 部分 检查数据库对象.docx_第6页
第6页 / 共44页
Informix Dynamic Server 1150 基础考试 555 认证准备第 4 部分 检查数据库对象.docx_第7页
第7页 / 共44页
Informix Dynamic Server 1150 基础考试 555 认证准备第 4 部分 检查数据库对象.docx_第8页
第8页 / 共44页
Informix Dynamic Server 1150 基础考试 555 认证准备第 4 部分 检查数据库对象.docx_第9页
第9页 / 共44页
Informix Dynamic Server 1150 基础考试 555 认证准备第 4 部分 检查数据库对象.docx_第10页
第10页 / 共44页
Informix Dynamic Server 1150 基础考试 555 认证准备第 4 部分 检查数据库对象.docx_第11页
第11页 / 共44页
Informix Dynamic Server 1150 基础考试 555 认证准备第 4 部分 检查数据库对象.docx_第12页
第12页 / 共44页
Informix Dynamic Server 1150 基础考试 555 认证准备第 4 部分 检查数据库对象.docx_第13页
第13页 / 共44页
Informix Dynamic Server 1150 基础考试 555 认证准备第 4 部分 检查数据库对象.docx_第14页
第14页 / 共44页
Informix Dynamic Server 1150 基础考试 555 认证准备第 4 部分 检查数据库对象.docx_第15页
第15页 / 共44页
Informix Dynamic Server 1150 基础考试 555 认证准备第 4 部分 检查数据库对象.docx_第16页
第16页 / 共44页
Informix Dynamic Server 1150 基础考试 555 认证准备第 4 部分 检查数据库对象.docx_第17页
第17页 / 共44页
Informix Dynamic Server 1150 基础考试 555 认证准备第 4 部分 检查数据库对象.docx_第18页
第18页 / 共44页
Informix Dynamic Server 1150 基础考试 555 认证准备第 4 部分 检查数据库对象.docx_第19页
第19页 / 共44页
Informix Dynamic Server 1150 基础考试 555 认证准备第 4 部分 检查数据库对象.docx_第20页
第20页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Informix Dynamic Server 1150 基础考试 555 认证准备第 4 部分 检查数据库对象.docx

《Informix Dynamic Server 1150 基础考试 555 认证准备第 4 部分 检查数据库对象.docx》由会员分享,可在线阅读,更多相关《Informix Dynamic Server 1150 基础考试 555 认证准备第 4 部分 检查数据库对象.docx(44页珍藏版)》请在冰点文库上搜索。

Informix Dynamic Server 1150 基础考试 555 认证准备第 4 部分 检查数据库对象.docx

InformixDynamicServer1150基础考试555认证准备第4部分检查数据库对象

InformixDynamicServer11.50基础考试555认证准备,第4部分:

检查数据库对象

开始之前

本教程介绍可以在数据库中创建和使用的对象。

这些对象有的用于保存原始数据,有的纯粹是为了改善性能,还有些用于帮助维护数据的完整性。

本教程讨论到的对象包括表、视图、索引、触发器、限制、同义词和序列。

本教程还简单地探讨了这些对象的用途和如何创建它们。

在本教程的末尾,简单讨论了一个内置的工具,它能够输出帮助重新创建和复制对象的SQL语句。

关于本系列

这个免费的共包含9篇教程的教程系列的目的是为了帮助您准备InformixDynamicServer(IDS)基础认证考试(555)。

这个认证将考察关于IDS11.50管理的入门级知识,包括基础SQL、如何安装IDS11.50、如何创建数据库和数据库对象、安全性、事务隔离、备份和恢复流程,以及数据复制技术。

这些教程为考试的每部分打下了坚实的基础。

不过,您不能仅使用这些教程作为唯一的考试准备材料。

回页首

关于本教程

本教程讨论的主题与考试的第4部分“IDS表、视图和索引”对应。

回页首

目标

完成本教程之后,您应该能够:

∙解释数据库表的用途,以及如何创建数据库表

∙解释非片段表、片段表和分区表之间的区别

∙描述是什么限制,以及能够在Informix数据库中使用的不同类型的限制

∙解释如何在数据库中创建限制

∙描述视图的概念,解释视图与表的区别

∙解释如何创建视图

∙描述索引在数据库中扮演的角色,以及如何创建它们

∙解释什么是同义词和序列,以及如何创建它们

∙描述什么是数据库触发器,以及如何创建它们

∙解释如何输出数据库中的对象的SQL语句(模式)

回页首

先决条件

本教程针对需要进一步提高自己的数据库管理员。

尽管具备基础的数据库知识有所帮助,但不是必要的。

回页首

系统需求

在学习本教程的过程中,您不需要安装IDS。

不过,如果您有IDS,将能从本教程学到更多东西。

如果您还没有安装IDS,可以下载免费的试用版(见参考资料)。

对象列表

讨论了数据库之后,我们继续探讨可以在数据库中创建供用户使用的对象。

表1描述了本教程将要讨论的对象。

尽管这还不是数据库中包含的所有对象,但是将帮助您熟悉一部分对象。

表1.对象及其说明

对象

说明

以行和列的格式储存数据

限制

限制数据值以保持数据库的完整性

视图

虚拟表

索引

用于从表获取数据的访问方法

触发器

对数据库中发生的事件的自动响应

序列

生成唯一整数的数据库对象

同义词

现有表、视图或序列对象的代替名称

如本系列教程的InformixDynamicServer11.50基础考试555认证准备,第1部分:

IDS计划和安装所述,表类似于以行和列存储数据的电子表格。

每个列描述表存储的一条数据,而每个行包含关于表的主题的特定实例的一些数据。

CREATETABLESQL语句用于创建表。

CREATETABLE语句的语法包含很多选项,可能变得很复杂,因此本教程不介绍该语法,但提供一些使用该语法的不同子句的例子。

CREATETABLE语句的最简单形式是创建一个仅包含基础列的表。

清单1.创建一个包含基础列的表

CREATETABLEcustomer(

SSNchar(11),

LNamechar(50),

Ageinteger,

Birthdaydate

);

这个例子创建一个包含4个列的名为'customer'的表:

'SSN'、'LName'、'Age'和'Birthday'。

注意列的定义,它是一个包含在一对圆括号中并以逗号分隔的列表。

清单2中的例子添加了一个储存子句。

如本系列的InformixDynamicServer11.50基础考试555认证准备:

第3部分:

DBMS实例和存储对象所述,表存储在dbspace中。

因此该储存子句列出将要创建表的dbspace的名称。

清单2.储存子句

CREATETABLEcustomer(

SSNchar(11),

LNamechar(50),

Ageinteger,

Birthdaydate

INdbspace1;

下一个例子(清单3)添加确定大小的属性。

表中的实际数据储存在称为Informix‘页’的磁盘空间中。

Informix页与O/S磁盘页不同。

Informix页是Informix执行磁盘读写时采用的I/O机制。

Informix页的大小在2K到16K之间。

尽管数据存储在页上,IDS不希望一个表的各个页分散到整个磁盘中,因此IDS使用了一个称为区段(extent)的机制。

区段是指相邻的页的集合。

因此表的大小可以指定希望在一个区段中包含多少个页。

默认情况下,区段的大小为8页。

IDS允许DBA指定分配给表的第一个区段的大小,以及分配给表的其他区段的大小。

当表的第一个区段已满时,将给它分配第二个区段。

当表的第一个和第二个区段已满时,将给它分配第三个区段。

IDS根据表数据需要的页的增加相应地增加区段。

注意:

磁盘上的区段是以页为单位的,但是在定义了区段之后,DBA以千字节为单位调整它们的大小。

因此,了解您的系统上的Informix页的大小非常重要。

对于大部分UNIX和Linux32位系统,默认的页大小为2K。

对于UNIX和Linux64位系统,以及Windows系统,默认的页大小为4K。

您还可以指定非默认的页大小。

清单3中的例子创建了一个表,假设Informix页大小为4K,它的第一个区段可以包含50个页,第二个区段可以包含25个页:

清单3.调整大小的属性

CREATETABLEcustomer(

SSNchar(11),

LNamechar(50),

Ageinteger,

Birthdaydate

EXTENTSIZE200NEXTSIZE100;

下一个例子(清单4)使用了称为lockmode的子句。

当用户尝试更新表中的行时,必须在需要更新的区域上放置一个锁,从而使另一个用户不能在此期间更新该区域。

默认情况下,表放置了一个lockmodepage锁,这表明锁定的区域为整个表。

由于一个页可能包含多个行,因此即使用户仅需要更新该页的某个行,在更新期间都会锁定该页的所有行,此时其他用户不能访问该页。

DBA可以将锁定区域更改为lockmoderow。

如果表放置了lockmoderow锁,正在执行更新的用户仅锁定了他所更新的行,其他更新用户可以访问页上的其他行。

清单4中的例子添加了一个lockmoderow子句;lockmodepage子句是可以替换的。

清单4.lockmoderow子句

CREATETABLEcustomer(

SSNchar(11),

LNamechar(50),

Ageinteger,

Birthdaydate

LOCKMODEROW;

每种锁模式都有其优点和缺点。

要详细了解锁,请阅读InformationCenter的Administration主题的“Locking”部分(见参考资料)。

片段/分区表

默认情况下,表在创建之后必须完全位于一个dbspace中。

它所在的dbspace可以由服务器分配给它,或在CREATETABLESQL语句中通过IN子句指定(见上面的清单2)。

必须位于一个dbspace中给表带来了几个限制,包括大小限制。

要实现更大的表,您可以创建片段表。

这些特殊的表打破了位于一个dbspace中的规则,它允许表的各个部分(片段)位于两个以上的dbspace中。

默认情况下表是不分成片段的,需要DBA显式地将其划分成片段。

可以通过两种方式之一将表划分成片段:

∙通过循环——将行均匀地分布到列出的片段中

∙通过表达式——指定一个将表放置到适当的片段的表达式

注意:

片段表在每个dbspace上只能有一个片段,因此必须为表的每个片段指定一个dbspace名。

清单5显示了DBA如何通过循环片段法创建一个新的表,从而将表分布在3个dbspace中。

清单5.基于循环片段法创建的新表

CREATETABLEcustomer(

SSNchar(11),

LNamechar(50),

Ageinteger,

Birthdaydate

FRAGMENTBYROUNDROBININdbs1,dbs2,dbs3;

清单6显示了DBA使用基于表达式的片段创建的新表。

当每次查询表以确定需要访问哪个片段时将计算表达式。

清单6.基于表达式的片段

CREATETABLEcustomer(

SSNchar(11),

LNamechar(50),

Ageinteger,

Birthdaydate

FRAGMENTBYEXPRESSION

(Age>50)INdbs1

(Age<51)indbs2;

在清单6的表达式中,Age列的值决定数据位于哪个片段中。

如果Age=28,那么将使用dbs1中的片段存储行,因为28>50。

由于每个dbspace仅能包含表的一个片段,因此CREATETABLESQL语句使用dbspace名称来识别表片段。

清单5和清单6中的例子仅是一个开始。

基于循环片段的表的片段数量可以与实例中定义的dbspace一样多。

基于表达式的片段表也可以拥有很多片段,并且可以根据需要使用更加复杂的表达式。

使用更加复杂的表达式的一个例子是:

清单7.基于更加复杂的表达式的片段

FRAGMENTBYEXPRESSION

(Age<50AND

(BirthdayBETWEEN'01/01/1998'AND'4/15/2008')

ORLNameIN("Smith","Zimmermann"))INdbs1,

(Age>51ORAge=17

ANDLNameNOTLIKE'%John%')INdbs2;

尽管表达式可以变得更加复杂(甚至比清单7中的表达式还要复杂),但经验表明最好使用比较简单的表达式,同时又要将数据很好地分布到各个片段中。

选择适当的片段模式能够显著改善性能。

要理解这一点,请阅读InformationCenter的Administering主题下的PerformanceGuide的“FragmentationGuidelines”部分。

分区表与片段表非常接近,唯有两个地方不同:

∙每个dbspace可以有一个或多个分区

∙CREATETABLE语法

分区表允许每个dbspace包含多个分区。

这样做的好处是,具有10个分区的表可以分布在10以内的dbspace中,而具有10个片段的表必须使用10个dbspace。

由于分区表允许每个dbspace上有多个分区,所以必须更改SQL语句的语法,因为不能再通过默认的dbspace名引用其中的分区。

清单8.分区表的语法

CREATETABLEcustomer(

SSNchar(11),

LNamechar(50),

Ageinteger,

Birthdaydate

PARTITIONBYEXPRESSION

PARTITIONpart1(Age>50)INdbs1

PARTITIONpart2(Age<51)indbs1;

清单8中的例子显示如何在同一个dbspace(dbs1)中创建两个分区,并给它们分配名称(part1和part2)。

片段或分区的名称的重要性在于它允许用户在未来操作片段或分区。

一个简单的例子是:

清单9.修改片段

ALTERFRAGMENTONTABLEcustomer

MODIFYdbs1TOAge<55INdbs1;

清单9中的例子修改了为从Age<50到Age<55的片段创建的表达式。

注意modify子句如何通过在MODIFY关键字之后指定dbspace名称dbs1,从而准确地引用将要修改的片段的表达式。

更改这个例子,转而使用以上的分区例子,结果类似于:

清单10.修改分区

ALTERFRAGMENTONTABLEcustomer

MODIFYPARTITIONpart1TOAge<55INdbs1;

注意清单10中的例子如何使用分区名part1指定需要修改的分区表达式。

临时表

临时表基本上与真实的表一样,但有一些小的例外:

1.当创建临时表的用户断开数据库连接时,将自动删除临时表

2.在所有类型的数据库中,可以不记录临时表的日志

3.临时表仅对创建它们的用户可见

可以通过以下两种方式之一创建临时表:

∙使用SELECT…INTOTEMP…SQL语句

∙使用CREATETEMPTABLE…SQL语句

在创建了临时表之后,就可以像数据库中的其他可见表一样使用它们。

清单11.创建临时表

CREATETEMPTABLEtemp_cust(Namechar(50),Oldint,Bdaydate);

SELECT*FROMcustomer,temp_tab

WHEREcustomer.Age=temp_cust.Old;

临时表不具备常规表的所有功能,但它们包含片段、索引和一些限制选项。

WITHNOLOG子句用于关闭临时表的日志:

清单12.关闭临时表的日志

CREATETEMPTABLEtemp_cust

(Namechar(50),Oldint,Bdaydate)WITHNOLOG;

限制

如果谈论表对象,必然会谈到限制。

事实上,RDBMS(RelationalDatabaseManagementSystem)的诞生源自一种类型的限制。

尽管限制类型是引用而非关系的,但是引用限制基于关系的构思之上。

在谈及限制时,我们通常谈到完整性(例如,引用限制通常称为引用完整性)。

事实上,限制帮助保持了数据的完整性。

根据Merriam-WebsterThesaurus词典,单词“完整(integrity)”和“损坏(corrupt)”是反义词,即它们的意思相反。

这同样适用于数据库,因为您最不希望数据被损坏(损坏的数据将无效)。

因此,我们设法使用不同类型的限制来保持数据的完整性。

一个重要例子是,对社会保险号(SocialSecurityNumber,SSN)列使用唯一性限制。

因为每位美国公民都应该有不同的SSN,因此您希望在该列设置限制,从而确保customer表中的每个行都有一个不同的、唯一的SSN值。

如果没有在数据库中使用限制,那么应用程序就必须维护唯一性,否则可能导致多个客户拥有相同的SSN。

如果拥有相同SSN的客户属于同一个人,那么还不至于导致数据损坏,但是您不能阻止向表中添加另一个使用该SSN的人,这就导致损坏的数据,或不一致的数据。

注意:

限制不一定存在数据库中;它还可以通过应用程序控制。

讨论在哪里设置限制不是三言两语就能说明白的,因此本教程不深入讨论。

但是您一定要使用一种限制,绝对不要同时忽略了这两种限制。

清单13中的例子在SSN中创建了一个唯一性限制,其名称为ssn_unq:

清单13.创建唯一性限制

CREATETABLEcustomer(

SSNchar(11)UNIQUECONSTRAINTssn_unq,

LNamechar(50),

Ageinteger,

Birthdaydate

);

注意:

IDS允许使用DISTINCT关键字代替UNIQUE。

IDS认为它们是同义词。

注意:

限制不一定要由DBA命名。

如果DBA不指定限制的名称,将自动为限制生成一个内部名称。

通过SQL语法给限制命名能够更容易识别限制违背错误,比如限制名出现错误。

表2描述了各种可用的限制类型:

表2.限制及其说明

限制

说明

UNIQUE或DISTINCT

限制每个列不出现两个相同的值

Primarykey

使用唯一限制,并允许在该列集上使用引用完整性

Foreignkey

在引用完整性中用于指向主键列的列

Check

列上的表达式,用于检查数据是否对该列有效

Notnull

要求每个行都包含针对该列的一个值

Default

当插入新行时,在没有为列指定值的情况下指定的默认值

引用限制

引用限制的存在依赖于其他限制的存在。

引用限制存在两组数据之间。

关系数据库中的数据的组在表中称为列。

因此,引用限制存在于一个或多个表的两个或多个列中。

在很多情况下,这种限制称为主/外键关系。

这是因为外键列引用主键列。

尽管这是非常常见的实践,但这不是规则。

引用限制可以存在两个列之间,不管这些列是否是键列(主键或外键)。

创建引用限制时需要遵循某些规则。

其中一些规则包括(不是完整的列表):

∙引用的列必须是唯一的,可以使用主键限制或唯一限制定义。

∙列必须使用同一数据类型或兼容的数据类型。

∙列必须位于同一数据库中。

清单14中的例子扩展了清单13,它添加了第二个表,该表包含针对第一个表的列的引用限制定义:

清单14.第二个表上的引用限制

CREATETABLEcustomer(

SSNchar(11)UNIQUECONSTRAINTssn_unq,

LNamechar(50),

Ageinteger,

Birthdaydate

);

CREATETABLEorders(

OrderNumberinteger,

OrderingCustomerchar(11)REFERENCEScustomer(SSN),

OrderTotalmoney

);

清单15提供的例子使用主键实现了相同的目标:

清单15.使用主键在第二个表上实现引用限制

CREATETABLEcustomer(

SSNchar(11)PRIMARYKEYCONSTRAINTssn_unq,

LNamechar(50),

Ageinteger,

Birthdaydate

);

CREATETABLEorders(

OrderNumberinteger,

OrderingCustomerchar(11)REFERENCEScustomer(SSN),

OrderTotalmoney

);

还可以创建一个要求多个列具有唯一性的表。

拿本例来说,那么就需要使用不同的语法定义唯一性或主键限制。

引用列也需要使用不同的语法。

注意:

如果要对主键使用多个列,那么必须在限制的引用方使用相同数量的列。

清单16.使用多个列

CREATETABLEstock(

StockNumberinteger,

ManufacturerCodechar(3),

Descriptionchar(50),

UNIQUE(StockNumber,ManufacturerCode)CONSTRAINTuq_stock

);

CREATETABLEcatalog(

CatalogNumberinteger,

StockNumberinteger,

ManufacturerCodechar(3),

FOREIGNKEY(StockNumber,ManufacturerCode)

REFERENCESstock(StockNumber,ManufacturerCode)

CONSTRAINTfk_catalog

);

清单16中的外键语法还将用于建立一个引用限制,即使您使用下面的语法来表示一个多列主键:

清单17.多列主键

CREATETABLEstock(

StockNumberinteger,

ManufacturerCodechar(3),

Descriptionchar(50),

PRIMARYKEY(StockNumber,ManufacturerCode)Constraintpk_stock

);

CHECK限制

CHECK限制是放置在一个列上的表达式,它为该列指定有效数据域。

当每次向列插入一个新值或更新列中的现有值时,将计算该表达式。

如果新值不满足表达式的条件,将向SQL语句返回一个错误。

不过,如果CHECK限制的计算结果返回一个NULL值,那么该值将被接收,并且不返回错误。

清单18提供一个CHECK限制的例子,其中一个人的Age的数据域范围是1-124:

清单18.Check限制

CREATETABLEcustomer(

SSNchar(11),

LNamechar(50),

Ageinteger,

Birthdaydate,

CHECK(0

);

定义相同的CHECK限制时,还可能用到以下语法:

CHECK(AgeBETWEEN1AND124)

在这个例子中,值必须为1和124,因为BETWEEN包含所指的值本身,如果使用0,那么Age0就是一个有效值。

在我的例子中,age=0不是有效值。

NOTNULL限制

NOTNULL限制阻止列包含NULL值。

NULL是指未知或未定义的值。

NULL值不等于0,不等于空格,也不等于一系列空格。

事实上,NULL值甚至

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 金融投资

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2