《VF数据库索引及记录操作课件》由会员分享,可在线阅读,更多相关《VF数据库索引及记录操作课件(32页珍藏版)》请在金锄头文库上搜索。
1、8.1 索引概述v1.索引的概念索引的概念v 所谓索引就是按照索引表达式(数据表的某个字段或字段的组合)的值使表中的记录有序排列的一种技术。v 一般情况下,标中记录的顺序是由数据输入的前后次序决定的,并用记录号予以标识。除非有记录插入或记录删除,否则表中的记录顺序总是不变的。 v 索引实际就是一种排序,但是他不改变表中数据的物理顺序,而是另外建立一个数据号列表。索引文件不能单独使用,必须同源数据表文不能单独使用,必须同源数据表文件一起使用件一起使用。v索引一旦建立后,就产生了一个相应的索引文件。索引文件中只包含两项信息:一是每条记录索引关键字表达式的值,另一项是与其对应的记录号。既在索引文件中
2、只保留索引关键字和记录号信息,并不存在记录的字段数据,因此它不能单独使用,必须同时打开原数据文件,才能使不能单独使用,必须同时打开原数据文件,才能使索引文件有效索引文件有效。v 在VF中,同一个数据库中的多个表以相同属性字段建立索引后,可根据索引表达式的值建立数据库中多个表间的关联关系。VF数据库索引及记录操作课件第8章 索引及记录操作VF数据库索引及记录操作课件2、索引的种类、索引的种类 根据关键字段值是否重复可将索引分为四种类型:主索引、候选索引、惟一索引、普通索引。主索引:索引表达式的值唯一能够标识每个记录的索引,即索引表达式的值不允许重复。主索引只能在数据库表中建立,一个表只能创建一个
3、主索引。候选索引:索引表达式的值不允许重复、有资格被选做主索引的索引。数据库表和自由表都可以建立侯选索引,一个表可以有多个候选索引。普通索引:是除了上面几种索引之外的一种索引,它允许索引关键字有重复的值,对有相同索引表达式值的记录按原有的先后顺序集中排列在一起。惟一索引:允许索引关键字有重复的值的索引,当有重复值出现时,索引文件只保存重复的第一次值。VF数据库索引及记录操作课件3 3、创建索引、创建索引1 1)利用表设计器创建索引)利用表设计器创建索引2 2)利用命令创建索引)利用命令创建索引A A、创建非结构索引、创建非结构索引INDEX ON To FOR ASCENDING Descen
4、ding命令功能:为当前表按 的值建立一个非结构索引文件,索引文件扩展名.IDX。例1:将学生档案表.DBF数据表信工系(学号第3位为2) 的学生按学号升序建立非结构索引文件xh.idx。 USE 学生档案表 INDEX ON 学号 TO xh FOR SUBS(学号,3,1)=”2” ascending 当索引建立后,新建立的索引文件将自动打开且处于 主索引的位置,记录随即按该索引顺序来排列。VF数据库索引及记录操作课件B、创建结构索引INDEX ON TAG FOR ASCENDING|DESCENDINGUniqueCandidate说明:说明:TAG:结构化索引文件每个索引都必须有一
5、个索引标识。记录的顺序默认为升序,也可用“Ascending”表示,降序用“Descending”;Unique建立唯一索引,Candidate建立候选索引,否则建普通索引 。例: 将学生档案表.dbf按籍贯和高考成绩降序索引,索引标识为jgcj,按学号升序索引,索引标识为xh,建立结构化复合索引文件。 USE 学生档案表 index on 籍贯+str(高考成绩,5) desc tag jgcj index on 学号 tag xhVF数据库索引及记录操作课件8.2建立表间的关联关系v1、建立表间“一对一”关系(p150)v2、建立表间“一对多”关系3、设置参照完整性VF数据库索引及记录操作
6、课件8.3 记录排序v1、物理排序v 排序就是根据数据表的某些字段(称为关键字段)的“值”(称为关键字值)的大小重排记录,(可为升序、可为降序)排序后将产生一个新新的可单独使用的数据表文件单独使用的数据表文件(*.DBF)。原数据表文件不变原数据表文件不变。VF数据库索引及记录操作课件命令方式: (1)命令格式: SORT TO ON /A|/D/C , /A|/D/C For Fields(2)命令功能: 根据”关键字段”的值(称为关键字值)的大小重排记 录,产生一个新的可单独使用的数据库文件(*.DBF)。 选项/A和/D分别表示升序或降序,不选择则默认为按升序排列。选项/C表示不区分字母
7、的大小写。VF数据库索引及记录操作课件2、按索引字段排序 a、先在“表设计器”窗口中,为表建立多个索引; b、选择“显示”下拉菜单“浏览”,进入“浏览”窗口; c、在“浏览”窗口下,打开“表”,选择“属性”,进入“工作区属性”窗口,查看所有操作。3、按索引表达式排序VF数据库索引及记录操作课件8.4 记录定位v7.1 绝对定位绝对定位v1、菜单方式、菜单方式v2、命令方式、命令方式v无条件记录定位:goto(go);goto top;goto bottom; v有条件记录定位:直接(顺序)定位和索引(快速)定位;v 定位命令仅仅是对记录指针进行定位的一种操作,它并不能显示定位的记录内容。如要显
8、示,则需要使用并且只能使用Display命令。 v3、相对定位vskip;VF数据库索引及记录操作课件v7.3 条件(顺序)定位条件(顺序)定位v 所谓顺序定位是指在表中从第一条记录开始,按照顺序搜索表,把记录指针定位在满足条件的第一条记录上。v 顺序定位适合于复杂条件或小型表的定位。v命令格式:v1)找首条:v Locate For 范围v2)找后续(继续查询):v Continue v &按照Locate指定的条件继续定位下一条记录VF数据库索引及记录操作课件例: 在学生挡案表.Dbf表中,查找姓“王”的学生。 Use 学生挡案表 Locate For Subs(姓名,1,2)=”王” &
9、如果用 Locate For “王”$姓名 可能会产生什么问题? Display &显示查询结果 Continue &继续定位查询下一个记录 ?Found() & Found()函数为.T. Display &显示第二条”王”姓记录 Continue &“End Of Locate Scope”显示定位结束 ?Eof() & Eof()函数为.T.VF数据库索引及记录操作课件7.3 7.3 索引定位索引定位 索引定位是一种快速定位记录的方法,利用索引定位将明显提高查询效率,适用于大型表的查询。 它要求数据表文件的记录是有序的,所以,事先必须对数据表文件进行索引,而且要求查询内容所在的字段或表达
10、式必须是索引文件的索引关键字段或表达式。 (查什么按什么索引) VF数据库索引及记录操作课件索引定位有两种命令格式:索引定位有两种命令格式:格式一: Find 格式二: Seek 1.FIND1.FIND命令命令(1) 命令方式 命令格式: FIND /功能: 在打开的以查询内容所在字段为索引关键字的索引文件中,快速查找关键字段等于等于或的第一个记录。VF数据库索引及记录操作课件说明: 执行命令前,必须首先建立以查询内容所在字段或表建立以查询内容所在字段或表达式为索引关键字的索引文件达式为索引关键字的索引文件,若已存在则打开该索引文件,且将其设置为主索引。 FIND命令通常适用于字符数据类型及
11、数值型字符数据类型及数值型,字符串中的字符可以不用定界符。 如果查找成功,则把记录指针指向逻辑顺序中第一条符合条件的记录,且FOUND()函数的值为.T.,否则,记录指针指向文件未尾,FOUND()函数的值为.F.。VF数据库索引及记录操作课件例题:例题1:在学生档案表中,用FIND命令查找学号为“9832101”的学生。 USE 学生档案表 index on 学号 to xh FIND 9832101 DISPLAY例题2:在学生成绩表中,用FIND命令查找成绩为78的学生. use 学生成绩表 index on 成绩 to cj find 78 disp例题3.在学生档案表.DBF数据表文
12、件中,以变量的形式,用FIND命令查找姓名为 “刘丽红”的学生(以姓名为索引关键字的索引文件XM.IDX已建立)。VF数据库索引及记录操作课件2.SEEK2.SEEK命令命令 FIND命令只能对字符型和数值型的数据进行查找,在某些情况下使用起来不方便,为此,系统中又提供了功能更强的SEEK命令。格式:SEEK 功能:在打开的以查询内容所在字段为索引关键字的索引文件中,快速查找关键字段等于值的第一个记录。VF数据库索引及记录操作课件其中:(1)SEEK命令适用于一切数据类型(C、N、D、L),表达式可以是常量、变量和函数所组成,但必须与索引表达式一致。表达式为C、D、L(.T.,.F.)常量时,
13、必须使用相应的定界符,如:“ ”、 。(2)表达式为变量时,要直接使用,不不需要用宏代换函数。 (3)如果查找成功,则把记录指针指向逻辑顺序中第一条符合条件的记录,且FOUND()函数的值为.T.,否则,记录指针指向文件未尾,FOUND()函数的值为.F.。VF数据库索引及记录操作课件例题3:例题:在学生档案表.DBF数据表文件中,用SEEK命令查找学号为“9921205”的学生(以学号为索引关键字的索引文件XH.IDX已建立)。 USE 学生档案表 INDEX xh &打开以学号为索引关键字的索引文件XH.IDX SEEK “9921205” &必须使用定界符 DISPLAYVF数据库索引及
14、记录操作课件小结小结:(1)LOCATE和SEEK、FIND都是用于在数据表文件中查询 定位记录指针,即把记录指针定位在满足条件的记录 上。特别强调:仅仅是定位记录指针。如要显示定位的 记录内容,则需要用DISPLAY命令。(2) LOCATE和SEEK、FIND的不同之处: LOCATE是顺序查询定位,可以直接利用原数据表进行 定位操作,而SEEK、FIND命令是索引查询定位,必须 首先对原数据表按定位数据所在字段或表达式进行索 引,建立相应的索引文件或打开相应的索引文件、索引 标识的前提下才能进行定位操作。 LOCATE和CONTINUE相配合可以连续查询定位多条记 录,而SEEK、FIN
15、D只能查询定位单条记录。 LOCATE是用条件表达式的形式来定位,而SEEK、 FIND是用常量、变量或变量组成的表达式的形式来定 位。VF数据库索引及记录操作课件(3) FIND和SEEK的不同之处: FIND命令适用于字符型和数值型数据,不可用于日期型和逻辑型数据类型。表达式为字符常量时,不须使用相应的定界符。表达式为变量时,不可直接使用,必须使用宏代换函数。 SEEK命令适用于数据类型(C、N、D、L),但若为C、D、L常量时,必须使用相应的定界符,如:“ ”、 、.。表达式为变量时,要直接使用,不需要用宏代换函数。VF数据库索引及记录操作课件8.5 记录删除与恢复v随着表文件的不断更新
16、,必然会出现一些无用的记录,需要删除。表文件记录的删除有二种:逻辑删除和物理删除。v(1)逻辑删除v 逻辑删除仅对记录作逻辑删除标记,作了逻辑删除的记录可以用Recall恢复为正常记录。v 1)命令方式v Delete For v Recall For VF数据库索引及记录操作课件v例:逻辑删除学生档案表中第6条记录。v Use 学生档案表v Delete Record 6v recall &能实现被逻辑删除记录的恢复吗?v2)菜单方式v 打开表选择需要作逻辑删除的记录,单击“表”,在弹出的快捷菜单中选择“删除记录”。v 打开表,单击“表”,在弹出的快捷菜单中选择“恢复记录”。VF数据库索引及
17、记录操作课件v(2)物理删除v 作了物理删除的记录,则从磁盘中永久删除。要物理删除表文件记录。v 应分两步进行:v 用Delete作逻辑删除。v 用Pack命令才能真正删除已加删除标记的记录。v 1)命令方式v Delete Forv Packv 参数说明:v 物理删除是对表中作了逻辑删除的记录从磁盘中彻底删除,这种删除是不可恢复的。v Pack命令执行后,将调整磁盘空间及记录号。但这部分磁盘空间只有在关闭表文件后,才能释放。VF数据库索引及记录操作课件v例: 物理删除学生档案表中99级的学生记录。v Use 学生档案表v Delete For Subs(学号,1,2)=”99”v Packv
18、2)菜单方式v 打开表,单击“表”,在弹出的快捷菜单中选择“彻底删除”。v(3)一次性物理删除表中的所有记录v Zapv参数说明:v 该命令不需要先进行逻辑删除,直接使用ZAP可一次性物理删除表的全部记录,但要慎重使用。VF数据库索引及记录操作课件v例:在命令窗口中依次输出下列命令观察、分析各条命令执行的结果。v Use 学生档案表v Copy To Xsda &建立一备份文件v Use Xsdav Delete For 专业代码=“021” .Or.专业代码=“031”v ListvPack &物理删除已作删除标记的记录vBrowsevDelete For 出生日期=1977/10/31 v
19、Browse vRecall For Year(出生日期)=1977 vBrowse &观察运行结果,1977年出生的记录其删除标记被除掉vGo 3 vDelete &对第三号记录作删除标记vBrowse &观察运行结果vZap &物理删除全部记录vBrowse &表文件中无任何记录,全部物理删除vClose AllVF数据库索引及记录操作课件8.6 记录修改v记录的修改v表记录的修改有手工修改方法和替换修改方法两类。v手工输入修改法适用于少量数据的修改,需要用户从v键盘上输入修改数据。v替换法适用于成批的有规律的数据修改v1)手工输入修改法v 命令方式vEdit For Fields vCh
20、ange For Fields vBrowse For Fields VF数据库索引及记录操作课件v 三条命令均具有修改记录的功能。修改结束后,按vCtrl+W存盘退出修改窗口。v Edit和Change如果没有作For选择,通过Go定位v或在Edit、Change后指明记录号,则可对包括当前记录v后的所有记录进行修改。v 修改有“浏览”和“编辑”两种窗口界面,可通过“显示”菜单v下的“浏览”和“编辑”来转换。v 修改备注型字段和通用型字段的方法与添加记录相同,v即双击“Mem”和“Gen”,在弹出的编辑窗口中进行修改。v 菜单方式v 打开表文件。v 单击“显示”及其下拉菜单中的“浏览”选项,
21、表被显v 示。用滚动条将光标定位在需要修改的记录的有关字段v 处,并修改数据。v 修改结束后,按CTRL+W存盘并退出修改状态。VF数据库索引及记录操作课件v例:在学生档案表.Dbf中,将学号为“9921203”的记录的“班级”修改为“99211”,将“个人简历” 添加“获2003年学院三好学生的光荣称号”内容。v Use 学生档案表v Edit Fields 学号,班级,个人简历 For 学号=”9921203”v例:理解修改记录命令示例。v Use 学生档案表v Go 3v Change &可对3号以后的记录进行修改VF数据库索引及记录操作课件v(3)记录的替换v 表文件的记录有时会遇到大
22、批量的有规则的数据要修改的问题,用手工修改法很麻烦、费时。这时,可以在程序设计中使用替换法。用Replace命令中指定的表达式的值来替换字段原有的值。vReplace With Additivev , With Additive v For While VF数据库索引及记录操作课件v参数说明:v 用With后指定的的值来替换当前表中指定范围内满足条件的字段的原有值。v 表达式的数据类型必须与替换的字段数据类型一致。v 若命令中和等可选项都缺省时,则只对当前记录进行替换。v 只有在对备注字段的数据进行替换时,可能需要使用Additive可选项。选择Additive,则表达式的值会添加到备注字段中已有数据的尾部。否则,替换字段原有的数据。v 通用型字段不能使用替换法。v 对多个字段的值进行替换,字段之间用“,”分隔。VF数据库索引及记录操作课件v例:现以某单位的工资管理为例,说明Replace的多种用法。v 对选定记录字段进行替换修改。v Use 基本工资表v Replace 基本工资 With 基本工资*1.2,岗位津贴 With 岗位津贴+40 For 职称=”教授”v Go 5v Replace 岗位津贴 With 岗位津贴+60 v Replace All 奖金 With 奖金+20VF数据库索引及记录操作课件