1、,Visual Foxpro程序设计 第4章 表的操作,计算机 科学学院,教师:,2009年 月 日,提 要,4.1 表的建立与修改,4.2 表的显示与维护,4.3 表中数据的过滤,4.4 表的排序与索引,4.6 数据统计,4.5 查询信息,4.7 多表操作,4.8 表与数组之间数据的传递,4.1 表的建立与修改,在VFP中,数据库(Database)和数据表(Table)是两个不同的概念。数据库不仅可以管理表、视图等实体,还可以提供数据字典、存储过程等数据管理功能。表(Table)可内含于数据库中,也可独立于数据库之外成为自由表。无论是数据库表还是自由表,保存的都是具体要处理的数据。,一个数
2、据表即是一个关系二维表; 数据表是数据处理和建立数据库应用的基本单元; 一个数据表的存在形式是一个磁盘文件,其后缀名缺省为.DBF 数据表可能是存储于某一个数据库中的数据库表,也可能是游离的、不属于任何数据库的自由表。这两种表基本操作没有太大的区别,并且在必要的时候可以转换表的类型。,以下是数据表的一些基本认识:,4.1.1数据表的建立,基本步骤:需求分析 定义表结构 录入数据 (一)需求分析数据表用来存储需要使用和管理的具体数据,因此数据表的建立不是盲目的,应有针对性。一般来说应根据具体的需要进行前期的数据采集和规划。需求分析的目的是设计出数据表的基本结构,即包含的字段和字段的属性等等。避免
3、产生如:存储的数据太杂乱;产生无意义和多余的字段;表中数据大量冗余等现象。,(二)定义表结构定义表结构就是定义各个字段的属性,包括字段名、字段类型、字段宽度和小数位数等。(1)表名、字段名(自由表):以字母或汉字开头,长度不超过10的字母、汉字、数字、下化线序列。,一个表中的字段名不能重复; 数字和下划线不能是字段名的首字符,表名可以。 表名和字段名应直观,而且好读好记 ;避免使用保留字,(2)字段类型和宽度,字段类型和宽度,个的表中最多可以有 255 个字段。 如果一个或更多的字段允许 null 值, 该限制为 254 个字段 字段类型代表了VFP的数据类型; 字段类型决定了字段存储的数据类
4、型,直接影响所有操作命令及程序编制; 字段宽度用以表明允许字段存储的最大字节数。对于字符型、数值型和浮点型3类字段,应根据需要设定适当的宽度,其它类型的字段宽度由VFP确定,备注型和通用性字段的宽度一律为4个字节,用以表示数据在.FPT(表备注)文件中的存储地址。,字符型数据描述不具有计算能力的文字数据类型,是最常用的数据 类型之一。字符型数据(Character)是由汉字和ASCII字符集中可打印字符 (英文字符、数字字符、空格及其他专用字符)组成,长度范围是0 254个字符,使用时必须用定界符双引号(“”)或单引号( )括起来。2、数值型数值型数据(Numeric)是由数字(09)、小数点
5、和正负号组成。最 大长度为20位(包括、和小数点)。,1、字符型,浮点型数据(Float)是数值型数据的一种,与数值型数据完全等 价。浮点型数据只是在存储形式上采取浮点格式。 4、双精度型宽度8位双精度型数据(Double)是更高精度的数值型数据。它只用 于数据表中的字段类型的定义,并采用固定长度浮点格式存储。 5、整型宽度4位,整型数据(Integer)是不包含小数点部分的数值型数 据。它只用于数据表中的字段类型的定义。整型数据以二进制形式存 储。,3、浮点型,存储宽度8位,其中小数固定4位,可表示货币范围-922337203685477.5807+922337203685477.5807
6、7、日期型 日期型数据(Date)是是用于表示日期的数据,用默认格式mm/dd/yyyy来表示。其中mm代表月,dd代表日,yyyy代表年,长度固定为8位。set mark to set date to set century on/offset strictdate to 0/1/2,6、货币型(Y型),8、 日期时间型日期时间型数据(Date Time)是描述日期和时间数据。其默认格式为mm/dd/yyyy hh:mm:ss。其中yyyy代表年,前两个mm代表月,dd代表日,hh代表小时,后两个mm代表分钟,ss代表秒,长度固定为位。,逻辑型数据(Logic)是描述客观事物真假的数据,用于
7、表示逻辑判断结 果。逻辑型数据只有真(.T.)和假(.F.)两种值,长度固定为1位。10、备注型备注型数据(Memo)用于存放较长的字符型数据类型。可以把它看成是字 符型数据的特殊形式。备注型数据没有数据长度限制,仅受限于现有的磁盘空间。它只用于数据 表中的字段类型的定义,其字段长度固定为10位,而实际数据被存放在与数据 表文件同名的备注文件中,长度根据数据的内容而定。存放于与数据表文件同名,扩展名为.FPT的备注文件中,9、逻辑型,11、通用型通用型数据(General)是用于存储OLE(对象连接与嵌 入)对象的数据。通用型数据中的OLE对象可以是电子表格、 文档、图片等。通用型数据长度固定
8、为4位,实际数据长度仅受限于现有 的磁盘空间。 字符型(二进制) 备注型(二进制),(3)小数位数只有数值型、浮点型和双精度型才能使之效数位数。应该注意的是小数点和正负号都须在字段宽度中占一位。,VF的命令指:由用户发出的,指示 Visual FoxPro 执行某种操作的指令。命令可由键盘键入,也可以从菜单上选择或者嵌入到程序代码中。,4.1.2 VF的命令结构,一般都具有以下的结构形式: FOR/ WHILE TO 子句 不是所有的语句都带有子句,有一些命令还可不带子句,比如ZAP命令。,1.:是系统约定的字符串,用以表述命令动机。 2.子句:用以规定该操作命令针对的记录范围。有以下几种情况
9、:ALL - (缺省)针对所有记录。RECORD - 针对第 N 条记录。NEXT - 针对当前记录(包括当前记录)开始的连续 N 条记录。REST - 针对从当前记录 (包括当前记录)开始直到最后一条记录。,3.FOR /WHILE 子句 用以规定需要操作的记录满足的条件。FOR子句是指命令针对满足条件的所有记录,如果命令中未指定范围,则使指针重新指向第一条记录,用逐条进行比较筛选;WHILE子句对记录进行条件检测时,是从当前记录开始,当遇到第一条不满足条件的记录时便停止操作。 如:LIST ALL FOR 价格=10000 .AND. 库存量50LIST ALL WHILE 价格=1000
10、0,4. 子句用以规定该命令针对的字段范围。若缺省 FIELDS 子句,则操作对象为表中的除M和 G型的全部字段。字段表中的字段用逗号(,)分隔。 如:USE SBLIST ALL FOR 价格=10000 FIELDS 品名,价格COPY TO SB1 FIIELDS 编号,品名,价格 5.TO 子句用来指明语句执行后产生的新文件名或输出设备名或保存结果的内存变量名。 如: LIST TO PRINT COUNT TO M1,1.顺序可任意 排列。2.命令行中的字母不区分大小写,字母可大小写混用。3. 命令行总长度不可超过8192个字符。在命令文件方式下,如果命令太长,一行内写不下,可用分号
11、(;)继行,换行继续输入。4.命令动词和所有系统保留字、函数名等都可只写前四个字符。,命令书写规则,数据记录的维护与操作,定义表结构(建新表)的几种方式:,1、交互式 (1)命令窗口中输入命令:CREAT 即可打开“表设计器” (表文件名:最多可达128个字符,仅 / : ? * “ | 等符号不能使用。) (2)“文件”-“新建”-“表”-“新建文件”即可打开“表设计器” (3) “文件”-“新建”-“表”-“新建文件”即可根据已有的表建立新表。,交互式:用表设计器(Table Designer)定义表结构,相关准备工作:设置默认目录。 设置默认目录目的:为了使新建的文件有组织的存放,应设置
12、新建文件的存放路径和访问路径。 方法1:选择“工具”-“选项”-“文件位置”-“默认目录”,然后输入默认目录,如:D:Mytable 方法2:使用SET命令设置默认目录。 如:SET DEFAULT TO D:Mytable 此时,新建文件将自动保存在默认目录中。,交互式:用表设计器(Table Designer)定义表结构,选定NULL表示可以接受不确定的值,便于和其它数据库通用。,定义表结构(建新表)的几种方式:,2、命令模式(CREAT TABLE SQL) 命令格式: CREAT TABLE ( (,) ,)FREE 例:用命令模式建立一个含三个字段的新表。 CREAT TABLE T
13、EST(编号 C(8),品名 C(8),价格 N(6,1)命令执行后便在默认当前目录下建立了一个数据表test.dbf包含了“编号”、“品名”和价格三个字段,但无记录。,(三)录入数据,录入数据(记录)实指向表中“添加”数据,一般来说也有两种方式。一种是在记录编辑窗口中添加,另一种是使用命令语句方式添加。 1、打开记录编辑窗口的方法 方法1:利用“表设计器”定义好表结构后,存盘弹出录入数据对话框,选择“Y”打开记录编辑窗口进行数据录入。,方法2:打开表后,使用“显示”-“浏览表”-“追加方式”在浏览窗口中添加数据。方法3:(1)修改在窗口中可直接修改记录的字段值。另有一种成批修改记录的方法:R
14、EPLACEWITH后面介绍。,(2)追加记录在交互方式下可使用“显示”菜单的“追加方式”以及“表”菜单的“追加新记录”、“追加记录”三种方法。 三种方法的区别为: 追加方式:在表尾追加一个新记录,完成后系统自动开辟新记录位置。是一种连续追加方式。 追加新记录:在表尾追加一个新记录,追加第二条记录时需要重复该命令。等效命令:APPEND 追加记录: 将其它表或OLE对象的数据作为新记录追加在表尾。等效命令:APPEND FROM,数据录入的几点说明:(1)在字符型字段内输入的数字系统当作字符处理; (2)逻辑型字段只能接受T,Y,F,N这4个字符,只显示T和F; (3)D型数据默认为美国格式,
15、即mm/dd/yy,使用SET DATA ANSI命令可将其设置为yy.mm.dd格式; (4)输入M型和G型字段值,需双击鼠标或按组合键:CTRL+PgDn或CTRL+PgUp,一旦M型和G型字段非空,则字段标志首字母将以大写表示,即:Memo或Gen (5)存盘:CTRL+W,通用型字段的操作,通用型字段(General)是一类较特殊的字段,它使VF能够存储和处理多媒体数据成为可能。G型字段和M型字段在很多方面是相似的,而且他们都保存在 .FPT 文件中。通用字段存储的一般都是OLE 对象,因此G型字段值采用“编辑”菜单中的“插入对象”命令输入。这些对象可以是已有的文档,也可以是临时建立的
16、新文档。,二、数据表的打开与关闭,(一)USE EXCLUSIVE shared 说明: 1、命令功能:在当前工作区打开或关闭表(含数据库表和自由表); 2、缺省选项,表示关闭当前工作区中的表; 3、打开表时,自动关闭先前已打开的表; 4、USE ? 命令等效于“文件”菜单的“打开”命令。此时若要进行修改操作,则需选定“独占”复选框。此时相当于执行命令: USE EXCLUSIVE,(二)关闭表的一些方法,三、数据表的修改,数据表的修改包括表结构和表记录的修改,但都需使数据表处于打开状态。 (一)表结构的修改(添加或删除字段、修改字段属性等) 1、使用“表设计器”或MODIFY STRUCTU
17、RE命令(交互式) 注:若改动了字段宽度或子段类型,VF会自动进行相应字段值的转换,但有时会丢失数据,因此最好在改动前将数据表备份。,以下是修改了字段属性后系统的自动转换方式,2、使用“表向导”(Table wizard)修改数据表结构(交互式) 表向导可修改表结构也可新建表结构。,3、使用 ALTER TABLE 命令修改数据表结构(命令方式) 命令格式:ALTER TABLE ADD|ALTER COLUMN(,)ALTER TABLE DROP COLUMN |RENAMECOLUMN TO ,命令说明:(1)ADD COLUMN子句用于添加字段。如:ALTER TABLE STUDEN
18、T ADD 身高 N(3,1)* 向student表中添加身高字段,宽度为3,小数位1。 (2)ALTER COLUMN子句用于修改字段。如:ALTER TABLE SB NUMBER C(5)* 将sb表的number字段改为C型,宽度为5。 问题:alter table TABLE1 add dd n(2) alter aa n(2,1) 表示何种操作?,命令说明:(3)DROP COLUMN 子句用于删除字段。如:ALTER TABLE SB DROP NUMBER* 删除SB表中的NUMBER字段。 (4)RENAMECOLUMN子句用于修改子段名。如:ALTER TABLE SB R
19、ENAME NUMBER TO NO* 将SB表中的NUMBER字段更名为NO。,问题:alter table SB add price n(5,1) drop aa rename dd to high表示何种操作?,表的常用维护命令,(一)记录的指针定位表刚打开时,记录指针总是指向第一条记录。在数据库的操作过程中,可利用指针定位命令调整指针的指向,使其指向需要的记录。当前指针所指的记录称为当前记录。 1、指针绝对定位 (GO|GOTO) 命令格式: GO / TOP / BOTTOM 命令功能: 将记录指针移到一个指定的记录上,而不管记录指针原来所处的位置。如: . USE SB. GO 3
20、. DISP,2、指针相对定位 (SKIP) 命令格式: SKIP 命令功能: 以当前记录为基准点,将指针向上(-)或向下(+)移动 N 条记 录,如无具体数值,则默认为1。如: USE SBSKIP GO BOTTOMSKIP?EOF( ) & .T.,(二)记录的追加1、插入新记录(INSERT)INSERT BEFORE BLANK 命令功能:在指定(当前)记录的后面或前面插入一条或多条记录,也可插入空记录。如: USE SBGO 4INSERT BEFORE BLANK 不带BLANK子句将打开表编辑窗口; BLANK子句直接插入一条空记录,不出现编辑窗口。,(二)记录的修改(添加或删
21、除记录、修改字段值等)记录的修改也有交互式和命令方式两种。在这里先介绍交互式,命令方式在了解了“表达式”后再来学习。通过窗口显示、修改数据,VF提供了EDIT/CHANGE和BROWSE等命令。其中EDIT和CHANGE的命令参数和功能相同。,BROWSE命令初步,打开一个表后,BROWSE命令的功能与“显示”菜单的“浏览”命令相同,均是打开数据浏览窗口。,记录在窗口中的两种显示方式:,浏览方式,编辑方式,两种显示方式可以通过“显示”菜单的“浏览”和“编辑”命令来切换。一个窗口也可以分成两个显示区域。,命令:BROWSE FIELDS FORLAST,(三)表结构和记录的显示,1、显示表结构命
22、令格式: LIST / DISPLAY STRUCTURE 2、显示表记录LIST/DISP FIELDSFOR/WHILE OFF TO PRINTER 说明:(1)使用OFF 选项表示显示时不显示记录号。(2)LIST 和 DISPLAY 的区别为:在缺省所有选项情况下,LIST 显示全部记录,而DISPLAY只显示当前记录。LIST 显示不停顿,而DISPLAY分屏显示。,表的维护命令: 表与表结构的复制 复制任何文件 COPY FILE TO 说明:若对表进行复制,该表必须是关闭的.,从表复制出表或其他类型的文件. COPY TO FORWHILE FIELDS TYPESDF|XLS
23、|DELIMITEDWITH 将当前表中选定的部分记录和字段复制成一个新表或其他类型的文件.,说明: 1.若不含TYPE 子句,默认新文件的类型是表. 2.要得到EXCEL 文件,则TYPE 子句必须取XLS. 3.要得到文本文件,则TYPE 子句必须取SDF 或DELIMITED.,复制表的结构: COPY STRU TO FIELDS 说明: 1.仅复制当前表结构,不复制其中的记录.,FIELDS不仅决定新表结构包含的字段,也指明了它们的排列顺序.,(3)删除记录 逻辑删除:为记录打删除标记,可恢复。在浏览窗口中,将记录的“删除标记区域”选中(CTRL+T),属于交互式;命令方式可使用DE
24、LETE命令。取消删除标记可使用RECALL命令。 物理删除:将记录从磁盘上删除,不可恢复。选择“表”菜单的“彻底删除”命令,属于交互式;命令方式可使用PACK命令。,删除文件(删除磁盘上存储的文件) ERASE = DELETE FILE 如:Erase sb.dbf Delete file a: abc.prg 注:不能删除处于打开状态的文件。删除记录 逻辑删除:DELETE FOR/WHILE 该命令对满足条件的记录作上删除标记,此时记录仍存在。如果命令不使用任何子句,则只对当前记录作标记。(已打删除标记的记录不能再进行逻辑删除),打上删除标记的记录仍可以参与数据操作,如果不希望这样,可
25、使用命令 SET DELE ON 命令将其屏蔽。SET DELE ON|OFF命令指定 Visual FoxPro 是否处理标有删除标记的记录,以及其他命令是否可以操作它们。,逻辑删除的记录是可以用命令恢复的: 命令格式: RECALL FOR /WHILE 常见用法: RECALL - 恢复当前一条记录RECALL ALL- 恢复库中所有记录 RECALL FOR - 条件恢复,删除带有删除标记的记录 (物理删除) PACK MEMO 带可选项MEMO:从备注文件中删除未使用空间,但不从表中删除标有删除标记的记录。 删除表记录时:此命令应在 DELETE 命令之后使用。无条件完全删除记录:
26、命令格式: ZAP : 使用该命令后,当前表中所有记录被无条件删除,只保留表结构。 相关命令: SET SAFE ON / OFF,(五)修改,1、修改表结构(Modify Structure )打开表设计器,修改表结构。 2、修改表记录 EDIT / CHANGE FIELDS FOR /WHILE :打开编辑窗口,修改表的记录。 3、替换修改 REPLACE WITH ADDITIVE WITH ADDITIVE, . FOR 命令功能:用 WITH 之后 的值替换 WITH 之前 的值。 ADDITIVE选项只对替换备注字段有用,把对备注字段的替代内容追加到备注字段的后面。,REPLAC
27、E命令示例: 假设表student.dbf的表结构为: xm(C,8);xh(n,8);nl(n,2);xb(L);bz(4)并有20条记录。use student Go 4 Fe1=“张三” Fe2=stuff(xh,7,2,”21”) Fe3=18 Fe4=.t. Fe5=“新同学” Append blank Repl xm with fe1,xh with fe2,nl with fe3,xb with; fe4,bz with fe5 addi,(1)过滤器(针对记录) SET FILTER TO 按条件过滤记录,屏蔽不满足条件的记录。 A.所有访问该表的命令都必须遵守 SET FIL
28、TER 指定的条件。 B.只有当记录指针在表中移动时,才计算由 SET FILTER 指定的条件。 C.不带 lExpression 发出 SET FILTER TO 命令将关闭当前表的选择器。 如:SET FILTER TO 性别 .AND. 年龄=20,(六)表的过滤,(2)设置字段表(针对字段)SET FIELDS TO ALL LIKE Skeleton | EXCEPT Skeleton 功能:限定能参与命令操作的字段。 LIKE 子句可以和 EXCEPT 子句联合起来使用: SET FIELDS TO ALL LIKE A*,P* EXCEPT PART* 相关命令:SET FIE
29、LDS ON|OFF 功能:决定使用SET FIELDS TO 命令设置的字段表是否有效。,OPEN DATABASE EXCLUSIVE SHAREDUSE DATABASENAME.TABLENAMEIN WORKAREAALIASTABLEALIASEXCLUSIVESHARED NOUPDATE,数据表的打开与关闭,表的维护命令:,表结构的显示: LIST / DISPLAY STRUCTURE 表记录的显示: LISTFIELDSSCOPEFORWHILEOFFTO FILE DISPLAY FIELDSSCOPEFORWHILEOFFTO FILE LIST 和DISPLAY 的异
30、同:1. List 默认显示所有的记录,记录为连续显示方式2. Display默认显示当前记录,display all为分屏显示,记录指针的移动: 表打开时,记录指针总指向第一个记录. 记录定位命令: GO TO TOP |BOTTOM| 说明: 1. TOP :指向表的第一个记录. 2. BOTTOM:指向表的最后一个记录. 3. 表示某记录的记录号.,记录移位命令: SKIP 说明: 1.从当前记录开始移动指针,表示移动记录的个数. 2.负值表示向文件头移动,正值表示向文件尾移动. 3.缺省,表示移动一个记录的位置.,表记录的删除和恢复: 1.记录逻辑删除: ( 打删除标记) DELETE
31、FORWHILE,2.记录恢复命令: 去掉删除标记,但已被物理删除的记录是不可恢复的. RECALL FORWHILE 说明:可选项都缺省,则只恢复当前记录.,3.记录物理删除命令: PACK 说明:真正删除带有删除标记的记录.,4.记录清除命令: ZAP 说明:物理删除当前表中的所有记录.相当于执行DELETE ALL 和 PACK 两条命令.,表数据的修改,一.成批修改数据: REPLACE WITH ADDITIVE , WITH ADDITIVE FORWHILE 说明: 1.若范围,条件都缺省,表示只对当前记录进行替换. 2.用表达式的值来替换字段的值. 3.ADDITIVE用于备注
32、型字段,表示把表达式的值添加到字段的原有内容后.,二.单个记录与数组之间的数据传送1.将记录传送到数组或内存变量 SCATTER FIELDS | FIELDS LIKE | FIELDS EXCEPT MEMO TO BLANK | MEMVAR BLANK 说明: 将当前记录的字段值按字段名表的顺序依次送到数组元素中,或依次送入一组内存变量. 使用MEMVAR将数据复制到一组内存变量中, BLANK 表示建立一组空的内存变量. 使用TO 可将数据复制到数组元素中,vfp会自动建立数组并自动扩大已存在但不够大的数组.,略,2.将数组或内存变量的数据传送到记录,GATHER FROM | ME
33、MVAR FIELDS | FIELDS LIKE | FIELDS EXCEPT MEMO 说明: 1).由于GATHER是将数据传送到当前记录,所以在修改前要确定记录的位置. 2).若数组元素多于字段数,则多出的就不送,若少了,则字段值不变. 3).内存变量值将传送给与它同名的字段, 4).缺省MEMO 将忽略备注型字段.,略,3.成批记录与数组间的数据传送.,将表的一批记录复制到数组. COPY TO ARRAY FIELDS FOR WHILE 说明: 若指定的数组不存在,则VFP会自动建立. 可以将单个记录的数据复制袄一维数组中. 还能将当前表的多个记录复制到二维数组中.一行存放一个
34、记录.,略,2.从数组向表追加记录 APPEND FROM ARRAY FOR FIELDS 说明: 数组可以是一维或多维的,数组的行数就是所追加新记录的个数. 注意与GATHER 区别,它是对表的当前记录进行替换. 若数组列数多于字段数,多于列的数组元素将忽略,反之,若字段数多于数组列数,则多出来的字段留空.,略,逻辑表的设置: 使用过滤器和字段表等逻辑表的优点: 一旦为一个表设置逻辑表后,则对该表进行任何操作时一直有效,直到撤消逻辑表为止.,一.过滤器: SET FILTER TO 说明:1.从当前表过滤出符合的记录,不符合的记录将被逻辑屏蔽起来,此后的操作仅限于满足过滤条件的记录. 2.
35、缺省,表示取消所设置的过滤器.,略,二.字段表 :限定命令操作能作用的字段.SET FIELDS TO , |ALL LIKE |EXCEPT SET FIELDS ON | OFF,说明: SET FIELDS ON | OFF 决定字段表是否有效. SET FIELDS OFF 表示取消字段表,恢复到原来的状态.,略,数据记录的搜索: 语法 :locate for 功能: 查找当前表中所有符合条件表达式的记录,且指针指向第一条满足条件的记录,若无满足条件的记录,指针指向文件尾。Locate for 常与continue 语句配合使用。 例: use studentlocate for 性别
36、=.T.dispcontinuedispuse,查询与统计,查询与统计是数据库系统使用最频繁的操作。VF中可以使用索引查询、视图或SELECT-SQL命令进行快速、灵活的查询。,一、表的排序与索引,(一)记录的排序 根据字段重排记录生成一个新表,原文件不变. SORT TO ON /A | /D /C , /A | /D /C FOR WHILE FIELDS | FIELDS LIKE | FIELDS EXCEPT ,说明:ON 子句后的字段名表示排序字段,/A,/D分别表示升序或降序,默认是按升序排./C表示不区分字段值中字母大小写. 不可选用备注型或通用型字段来排序. 可使用多个字段名
37、实现多重排序.即先按主排序字段排序,对于字段值相同的记录再按第二排序字段排序,可类推. 缺省,FOR WHILE等子句表示对所有记录排序. FIELDS子句指定新表包含的字段.,(二)索引,1、记录的物理顺序与逻辑顺序 物理顺序-在磁盘上的存储顺序,执行排序后,就在新文件中形成了新的物理顺序. 逻辑顺序-索引不会改变记录的物理顺序,而是按照某个索引关键字来建立记录的逻辑顺序.每个值对应原文件中的一个记录号,这样就确定了记录的逻辑顺序. 说明:索引文件只包括关键字和记录号两个字段,所以占据空间更小,而且当索引起作用后,增删或修改表记录时索引文件都会自动更新,因此索引比排序应用更广.,查询与统计,
38、2、索引的目的和特点,当用户有不同需求时,为了加快数据的检索、显示、查询和打印速度,需要对文件中的记录顺序重新组织,而索引技术则是实现这些目的的最为可行的办法。索引技术除可以重新排列数据顺序外,还可以建立同一数据库内数据表间的关联。而且SQL查询语言必须靠索引技术来支持。表一旦按索引表达式建立索引后,就产生了一个相应的索引文件。一旦表和相关的索引文件被打开,则对表操作时,记录的顺序按索引表达式的值的逻辑顺序显示和操作。在Visual FoxPro系统中,同一个数据库中的多个表,以同名字段建立索引后,可根据索引表达式的值建立数据库中多个表间的关联关系。,3、索引的分类,按扩展名: (1)复合索引
39、: CDX :允许包含多个索引(2)单索引: IDX 其中复合索引又分为: 结构的:文件名.CDX,随表的打 开而打开。 非结构的:用户对其取名,需用专门的命令打开。 按功能来分:控制是否允许相同的索引关键字值在不同记录中重复出现,或允许在永久关系中建立参照完整性.,索引按功能分类,(1)主索引(Primary Index)在数据库中的数据表可以建立主索引(自由表不能)。索引表达式的值是唯一能够标识每个记录处理顺序的值。因此,一个数据表只能建一个主索引。有的情况下,在数据表中有多个字段值都能够确定记录的顺序,但表中已有主索引,则它们可以建立候选索引。主索引表达式值经常在多个文件之间形成关系,而
40、且可作为被引用数据表中的查找值。主索引主要用于持久性的主数据表中或者建立参照完整性的被引用表中。,(2)候选索引(Candidate Index)候选索引像主索引一样,它的索引表达式的值是唯一能够标识每个记录处理顺序的值。但是,一个数据表可以建立多个候选索引,它在特定环境下可以视为主索引。如果一个表中已有主索引,则只能建立候选索引。 (3)普通索引(Regular Index)普通索引表示把由索引表达式为每个记录产生的值,存入索引文件中。如果多个记录的索引表达式值相同,则可以重复存储,并用独立的指针指向各个记录。 (4)唯一索引(Unique Index)唯一索引表示把由索引表达式为每个记录产
41、生的唯一值,存入索引文件中,如果数据表中记录的索引表达式值相同,则只存储第一个索引表达式值。,INDEX ON TO | TAG OF FOR COMPACE ASCENDING |DESCENDING UNIQUE | CANDIDATE ADDITIVE ,4、索引的建立(命令方式),说明: (1)可包含一个或多个字段。当由多个字段构成表达式时,必须字段用函数转化为一致。此时,先按排在最前面的字段大小排列(索引),若相同,再按排在第二位的字段索引,依此类推。,命令一:,说明:(2)TO IDXFileName 创建 单 索引文件。索引文件的默认扩展名为 .IDX。 如:use sbinde
42、x on 编号+STR(价格) to bh (3)在 TAG OF 中不包含可选的 OF 子句,便可以创建结构复合索引文件。包含该子句表示创建非结构复合索引文件。 如:use sbindex on str(价格,9,2)+名称 tag jg index on 名称 tag pingming of pm additive ADDITIVE :建立时不关闭先前打开的索引文件。,说明:(4) CANDIDATE | UNIQUE 使用INDEX 命令系统默认建立普通索引型文件。 UNIQUE表示建立唯一索引型文件;CANDIDATE表示建立的文件是侯选索引型,但需与TAG子句一起 使用。 如:use
43、 sbindex on -价格 to jg1 uniqindex on 使用年限 tag synx cand addi (5)COMPACT :指定单索引文件为压缩的。,说明:(6) ASCENDING |DESCENDING 却省时系统默认记录按升序排列。ASCENDING表示升序,DESCENDING 表示降序。 如:use sbindex on 名称 to mc1 ascending index on 编号 tag bh1 descending additive (7) INDEX ON命令不能建立主索引。自由表不能建立主索引。通过表设计器只能建立结构复合索引文件。,creat tabl
44、e aa(a1 c(4),b1 n(3),c1 c(8),primary key a1 tag a1) alter table aa drop primary key alter table aa add primary key a1 tag a1 alter table aa add unique a1+c1 tag ac,命令二:,建立或修改主索引、候选索引,1、CREAT TABLE ( (,) ,, PRIMARY KEY|UNIQUE TAG ),2、ALTER TABLE ADD| DROP PRIMARY KEY|UNIQUE TAG ,5、索引的使用,使用索引查询,必须同时打开
45、表与索引文件。 一个表可以打开多个索引文件,同一个复合索引文件中可以 包含多个索引标识.但任何时候都只有一个索引文件起作用.在复合索引文件中也只有一个索引标识能起作用. 当前起作用的索引文件称为主索引文件,当前起作用的索引标识称为主控索引. 步骤:打开表-打开索引文件-确定主控索引文件-对于复合索引文件还须确定主控索引.,6、索引的打开与关闭,使用以索引为前提的命令,必须同时打开表与索引文件。 索引刚建立时,索引文件呈打开状态。 若当前打开了多个索引文件,通过 SET INDEX 命令或SET ORDER TO 命令来确定主控索引文件。 除结构复合索引可以随着表的打开而打开外,其他索引文件必须
46、用命令方式打开。 表关闭时索引文件也跟着关闭。,(1)系统约定:,(2)打开索引文件,SET INDEX TO | ? ASCENDING | DESCENDING ADDITIVE指定要打开的一个或多个索引文件。在索引文件列表中,应使用逗号分隔多个索引文件。索引文件列表中,可包含任意个 .IDX 或 .CDX 索引文件名。 说明: 索引文件列表中,第一个索引文件将成为主控索引文件,它控制记录的访问和显示。如果第一个索引文件是 .CDX 文件,并且没有发出 SET INDEX TO TAG 命令,则按记录的物理顺序显示和访问记录。,说明:SET INDEX TO 关闭当前工作区中除结构复合索引
47、文件中的所有索引文件,同时取消主控索引。 若缺省ADDITIVE则在使用本命令时,除结构复合索引文件之外的索引文件均被关闭。可使用USEINDEX在打开表的同时打开索引文件并确定中的第一个索引文件为主控索引文件。 如: use sbset index to bh,jg &主控索引为bh 等效于: use sb index bh,jg,7、主控索引的确定,索引刚建立时,索引文件呈打开状态,且为主控索引文件。 只有一个索引文件被打开,则它成为主控索引文件。 若当前打开了多个索引文件,通过 SET INDEX 命令或SET ORDER TO 命令来确定主控索引文件。SET INDEX TO 命令 中
48、,第一个索引文件将成为主控索引文件,它控制记录的访问和显示。如果第一个索引文件是 .CDX 文件,并且没有发出 SET ORDER TO TAG 命令,则按记录的物理顺序显示和访问记录。,SET ORDER TO | TAG OF CDXFileName ASCENDING | DESCENDING ,一个表可以同时打开多个索引文件。但是,只有一个单索引 (.IDX) 文件(主控索引文件)或一个来自复合索引 (.CDX) 文件的索引标识(主控标识)决定表中记录的显示和访问顺序。可用该命令来指定主控索引文件或主控标识。表示已打开索引的序号,该序号来指定主控索引文件或主控索引.指定该单索引文件为主控索引文件.,