资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,1,主讲:王学军,电话:,13773990898,(移动校园网),电邮:,sqcwxj,办公地点:系部办公楼,(,原学生,1,号宿舍楼,)507,Visual FoxPro教程,2026/4/7 周二,第,3,章 数据库与表的创建和使用,信息系统的基础是数据库。设计一个完善、高效、结构优化的数据库,是创建信息系统过程中必不可少的重要环节。在,VFP,中,,表是数据的容器,,系统使用表以行和列的形式存储数据,这些行和列就是记录和字段;,数据库是表的容器,,它联合、组织以及使用表和视图提供的结构和操作环境。,在,VFP,中,构建数据库也包含创建表。但要注意的是,,数据库,和,表,均以文件形式存储在磁盘上,其中数据库文件扩展名为,.,dbc,、表文件扩展名为,.dbf,,只是表可以属于数据库管理。,2026/4/7 周二,2,本章要点,数据库概述,数据库的创建、打开与使用,表的创建与使用,永久性关系与参照完整性,有关数据库及其对象的常用函数,2026/4/7 周二,3,3.1,数据库概述,确定建立数据库的目的,进行数据需求分析。,确定需要的各种表,即将信息分为若干个独立的主题,每个主题都将是数据库中的一个表。,确定所需字段,也就是将在表中保存的信息。,确定表之间的关系,形象而又直观地反映现实世界中各实体间的真正关系。,改进设计、优化设计。,3.1.1,数据库设计的过程,数据库的概念设计,数据库的逻辑设计,2026/4/7 周二,4,3.1,数据库概述,3.1.2,数据库的组成,1.,表,(,Table,),属于某一数据库的表称为“,数据库表,”。与自由表相比,,数据库表具有许多扩展功能和管理特性。,表与数据库之间的相关性是通过表文件与库文件之间的双向链接(前链和后链)实现的。前链是保存在数据库文件中的表文件的路径和文件名信息;后链是存放在表文件中的数据库文件的路径和文件名信息。,数据库文件,前链,前链,前链,前链,后链,表文件,后链,表文件,后链,表文件,后链,表文件,2026/4/7 周二,5,2.,视图,(,View,),视图是从分散在相关表中的数据通过链接条件收集在一起的“虚表”。视图兼有表和查询的特点。,3.,连接,(,Connection,),连接是保存在数据库中的一个定义,它指定了数据源的名称。这里所说的数据源是指远程数据源,一个远程数据源通常是一个远程数据库服务器或文件,并且已为它在本地安装了,ODBC,驱动程序和设置了,ODBC,数据源名称。,4.,存储过程,(,Stored Procedure,),存储过程是在数据库数据上执行特定操作并储存在数据库文件中的程序代码。在数据库打开时会自动加载到内存中。,2026/4/7 周二,6,表中字段的标题、注释、默认值、输入掩码和显示格式,以及字段在表单中使用的默认控件类。,表的主索引关键字,数据库表之间的永久性关系,长表名和表注释,字段级和记录级有效性规则,存储过程,插入、更新和删除事件的触发器,3.1,数据库概述,3.1.3,数据字典,数据字典是指存储在数据库中用于描述所管理的表和对象的数据,即关于数据的数据(,元数据,)。,数据字典可创建和指定如下内容:,2026/4/7 周二,7,界面操作方式创建数据库,用项目管理器创建,用菜单命令或工具栏创建,命令方式创建数据库,CREATE DATABASE,DatabaseName,|?,数据库设计器与“数据库”菜单,3.2,数据库的创建、打开与使用,在,VFP,中,每创建一个数据库都将在磁盘上产生三个文件:,数据库文件,(,.,dbc,)、关联的,数据库备注文件,(,.,dct,)、关联的,数据库索引文件,(,.,dcx,)。,3.2.1,数据库的创建,2026/4/7 周二,8,新建的数据库,保存后自动以独占方式打开;,打开数据库中的表,系统会自动打开相应的数据库;,在项目管理器中选择一个数据库并单击“修改”按钮;,OPEN DATABASE,DatabaseName,EXCLUSIVE|SHAREDNOUPDATEVALIDATE,打开多个数据库可重复进行数据库打开操作即可,系统默认最后一个打开的数据库为当前数据库。,根据需要可用,SET DATABASE TO,命令将另一个被打开的数据库设为当前数据库或在“常用”工具栏“数据库”下拉列表中选择一个已打开的数据库作为当前数据库。,3.2.2,数据库的打开与关闭,打开数据库,使用数据库前必须打开数据库,2026/4/7 周二,9,2.,检查数据库的有效性,在使用命令打开数据库时若使用了,VALIDATE,关键字,则系统会检查数据库的有效性;也可在打开数据库后用,VALIDATE DATABASE,命令检查数据库的有效性和更新链接。,VALIDATE DATABASE,RECOVER TO PRINTER|TO FILE,FileName,【,注,】,RECOVER,用于说明更新链接,缺省时仅检查数据库的有效性,TO FILE,用于说明检查结果信息的去向,缺省时在,VFP,主窗口显示;,VALIDATE DATABASE,命令只能处理以独占方式打开的当前数据库。,2026/4/7 周二,10,在项目管理器中选择要关闭的数据库后单击“关闭”按钮;,使用,CLOSE DATABASE,命令关闭当前数据库;,使用,CLOSE DATABASE ALL,关闭所有打开的数据库;,关闭(退出),Visual FoxPro,系统。,3.,关闭数据库,【,注,】,在关闭数据库时,从属于该数据库的表同时被关闭(如果表已被打开);,使用,CLOSE DATABASE,命令可关闭当前数据库和表,若没有打开的数据库,则关闭所有工作区内所有打开的自由表、索引,并将当前工作区设为,1,。,2026/4/7 周二,11,用,Windows,操作系统删除;,非正常删除,用,DELETE FILE,命令删除;,非正常删除,在项目管理器中通过“移去”操作进行删除。,正常删除,这样才能删除数据库中所包含的表的链接信息,数据库表将自动变成自由表。否则,只能用命令,FREE TABLE,强行解除数据库与表间的链接,将表变成自由表。,4.,删除数据库,删除数据库意味着删除存储在数据库中的一切数据,包括存储过程、视图、表之间的关系、数据字典等。,2026/4/7 周二,12,VFP,中的表(,Table,)是指存放在磁盘文件中的一张二维表,通常用来描述一个实体。,表中的一列称为字段(,Field,),字段规定了数据的特征。,表中的一行称为记录(,Record,),,记录是字段值的集合。,表的记录必须用一个公共结构来存储,这个结构就是表结构。,表分为数据库表(简称“表”)与自由表两种类型。,表文件名队要遵守,Windows,中的约定外,不可使用,AJ,中的单个字母作为文件名,且最好不要包含空格字符。,3.3,表的创建与使用,2026/4/7 周二,13,字段名,:用以在表中标识该字段。,字段的数据类型,:表中每个字段都有特定的数据类型(参见课本,P.76,表,3-1,),字段的宽度,:是指该字段所能容纳数据的最大字节数。有一些数据类型的宽度是固定的。,小数位数,:对于数值型、浮点型和双精度型的字段,可以指定其小数的位数。如数据的整数部分不为,0,,则整个宽度至少应比小数位数大,2,,如是纯小数,则整个宽度只要比小数位数大,1,。,空值支持(,NULL,),:,通过使用空值(,NULL,),,就有了一个判定某个字段是否具有一个值的办法。,3.3.1,表结构概述,3.3,表的创建与使用,2026/4/7 周二,14,用,“,表设计器,”,创建表结构,项目中的表,:,项目,自由表,新建,新表保存,(,表向导,另存为,保存,),非项目中的表:,新建,新建文件保存,(,向导,另存为,保存,),3.3.2,创建和修改表结构,【,注,】,在“表设计器”中创建结构完成后,会出现一对话框,问你是否立即输入数据。如果要立即输入数据,可单击“是”按钮,否则单击“否”按钮。创建表结构后,在磁盘上会生成扩展名为,.DBF,和,.FPT,的两个文件。,用,“,表设计器,”,修改表结构,项目,表,修改或用命令,MODIFY STRUCTURE,表设计器,2026/4/7 周二,15,字段的标题和注释,标题:浏览表时代表字段的标签,但引用字段时必须使用其字段名。,注释:字段的说明信息,在项目管理器中选择一个字段时,在窗口下部将显示该注释。,字段的显示属性,格式(,Format,):用于指定输入和显示时的格式(对输入字段值的整体约束)。,P.79,表,3-2,输入掩码(,InputMask,),:用于指定字段中输入数据的格式(对输入字段的每位约束)。,P.79,表,3-3,3.3.3,字段属性与表属性,1.,字段的扩展属性,2026/4/7 周二,16,默认值,为字段所指定的最初的值。设定默认值时必须是一个与字段类型相同的表达式。如果字段设置为允许,Null,,则字段默认值可设置为“,Null”,,否则字段的默认值不可设置为“,Null”,。如果用户未指定字段的默认值且字段不允许为空值,则系统按下表所述的方式设置字段的默认值。,字段数据类型,默认值,字符型,长度与字段宽度相等的空串,数值型、整型、双精度型、浮点型、货币型,0,逻辑型,.F.,备注型、通用型,(无),日期型、日期时间型,空的日期,2026/4/7 周二,17,字段的有效性规则和有效性信息,字段有效性规则:用来控制输入到字段中的数据的取值范围。该规则是一个包含当前字段的逻辑表达式,如果输入的值不满足规则要求(即逻辑表达式的值为,.F.,)则拒绝该字段值并显示一个消息框。,字段有效性信息:也称字段有效性说明,是一个字符型表达式,通常与字段的有效性规则配合使用,用于指定在不满足规则要求时所显示的消息框中的说明信息。,字段的默认控件类,作用是指定使用“表单向导”生成表单或从数据环境中将字段拖放到表单上时,与该字段相应的控件类。,2026/4/7 周二,18,显示打开,用菜单等界面操作方法或,USE,命令直接打开表,隐式打开,指在执行某些操作时系统会自动打开相应的表。如在项目管理器窗口中选择一个表后单击“修改”或“浏览”按钮时,会自动打开表;在执行,SELECT-SQL,语句进行查询时,也会自动打开数据源表等。,3.3.4,表的打开与关闭,在,VFP,中,表使用前必须打开。表的打开可以是显式打开,也可以是隐式打开。,2026/4/7 周二,19,概念,在打开一张表时,必须为该表指定一个“工作区”。它是用以标志一张打开的表的区域。编号,132767,,前,10,个也可用,AJ,工作区中表的别名,USE,表文件名,ALIAS,别名,函数,ALIAS(,工作区号,),可得到指定工作区的表别名。,函数,SELECT(,别名,),可测试指定表别名的工作区号。,当前工作区,在,“,数据工作期,”,中设置当前工作区,命令:,SELECT,工作区号,|,别名,3.3.4,表的打开与关闭,1.,工作区,2026/4/7 周二,20,【,注,】,操作非当前工作区中的表的方法:一是把非当前工作区的表选为当前工作区(用,SELECT,命令);二是在命令中强行指定工作区(用,IN,工作区号,|,别名)如:,GO TOP,IN,js,。,SELECT 0,指将未被使用的编号最小的工作区设为当前工作区,2.,数据工作期窗口,数据工作期窗口是当前数据动态工作环境的一种表示。,VFP,启动后,系统自动生成一个数据工作期,称为“默认工作期”。数据工作期窗口的打开方法:,窗口数据工作期,常用工具栏上的“数据工作期窗口”按钮,2026/4/7 周二,21,界面方式,文件,打开,数据工作期,打开,项目管理器,修改或浏览,在命令窗口中用命令,USE?,打开“使用”窗口,命令方式,USE,表名,IN,别名,|,区号,AGAIN,ALIAS,表别名,;,NOUPDATE,3.,表的打开,【,注,】,如一张表同时在多个工作区中打开且均未指定别名,则在第一次打开的工作区中,别名与表名相同,其他工作区中用,AJ,以及,W11W32767,表示。,2026/4/7 周二,22,界面方式,在数据工作期中关闭,命令方式,USE IN,别名,|,工作区,关闭所有的表,CLOSE TABLES ALL,CLOSE DATABASE ALL,CLOSE ALL,4.,表的打开,【,注,】,在退出,Visual FoxPro,系统时,所有的表都将被关闭。,2026/4/7 周二,23,设置独占与共享打开表的默认状态,工具选项数据,SET EXCLUSIVE,ON,默认“共享”打开,SET EXCLUSIVE,OFF,默认“独占”打开,强行用一种方式打开表,在“打开”窗口中设置,USE,表名,SHARED|EXCLUSIVE,5.,表的独占与共享,【,注,】,当一个表被多次打开时,只能以第一次打开方式为准。,SET EXCLUSIVE,的设置并不能改变已经打开表的状态。,2026/4/7 周二,24,表结构创建后立即输入记录,在浏览窗口中追加记录,菜单命令“,表,”“,追加新记录,”,菜单命令“,显示,”“,追加方式,”,使用,INSERT-SQL,命令追加记录,INSERT INTO,表名,(,字段名,1,字段名,2,);,VALUES,(,表达式,1,表达式,2,),举例:,INSERT INTO,xs(xh,xm,xb,xzydm,);,VALUES(050503017,高山,男,050301),3.3.5,记录的处理,1.,记录的输入,【,注,】VALUES,后面括号中的具体记录的值要和,INSERT INTO,后面的字段名列表保持位置和类型上的一致。,2026/4/7 周二,25,使用,APPEND,与,APPEND FROM,命令追加记录,APPEND,BLANKIN,工作区号,|,别名,APPEND FROM,文件名,FIELDS,字段列表,FOR,条件,;,DELIMITED,|,XLS,其中,,,DELIMITED,用于说明追加文件为文本文件;,XLS,用于说明追加文件为,Excel,文件,缺省时追加文件为表文件。该命令也可通过界面完成:“,表,”“,追加记录,”,备注型字段与通用型字段的数据输入,备注型:浏览窗口中,备注型字段上显示,memo,表示无内容;,Memo,表示有内容。备注型字段内容输入方法是光标定位到该字段上,按,+,或,双击,通用型:浏览窗口中,通用型字段上显示,gen,表示无内容;,Gen,表示有内容。通用型字段内容输入方法同上,然后再用菜单命令“,编辑,”“,插入对象,”插入其内容。,2026/4/7 周二,26,界面,菜单命令“,显示,”“,浏览,”(编辑),命令,BROWSE,FIELDS,字段列表,FOR,条件,;,RREEZE,字段名,NOAPPEND;,NODELETE NOMODIFYTITLE,表达式,例:,CLOSE TABLES ALL,USE,xs,BROWSE FIELDS,xh,xm,FOR,xb,=,女,;,NOMODIFY TITLE,女学生,2.,浏览窗口,3.,记录的筛选(,横向筛选,),界面,菜单命令,“,表,”,“,属性,”,“,数据过滤器,”,命令,SET FILTER TO,条件,2026/4/7 周二,27,界面,菜单命令,“,表,”,“,属性,”,“,字段筛选,”,命令,SET FIELD TO,字段列表,SET FIELD TO ALL,列出所有字段(取消筛选),4.,限制对字段的,访问,(,纵向筛选,),5.,记录定位,(,1,)记录指针,表被打开后,有三个控制记录的标志:,开始标志,、,指针标志,、,结束标志,。,每当打开表文件时,指针总是指向第一个记录,。,文件头,(包含,表结构,等信息),第,1,条记录,第,2,条记录,第,n,条记录,录开始标志,记录结束标志,记录指,针,2026/4/7 周二,28,【,注,】,RECNO(),测试当前记录指针的位置,开始标志用,BOF(),测试,结束标志用,EOF(),测试。,打开表时记录指针情况,如下表:,表中记录情况,BOF(),值,RECNO(),值,EOF(),值,无记录,.T.,1,.T.,有记录,.F.,1,.F.,记录指针的初始值总是,1,,不可能为,0,或负数,最大值是表中记录总数,+1,。,2026/4/7 周二,29,界面操作,表转到记录,在浏览窗口移动光标,“,记录号,”,:,绝对定位,“,定位,”,:,条件定位,范围选项有,ALL,、,NEXT,、,RECORD n,、,REST,5.,记录定位,(,2,)记录定位的实现,2026/4/7 周二,30,【,注,】,若定位时未找到相应记录,则指针指向指定范围的结尾。,首记录,当前记录,末记录,ALL,NEXT n,REST,RECORD n,n,2026/4/7 周二,31,使用命令,绝对定位:,GOTO,记录号,|TOP|BOTTOM IN,区号,|,别名,相对定位:,SKIP,nRecords,条件定位:,LOCATE FOR,条件表达式,范围,(,2,)记录定位的实现,【,注,】,若从第一条记录向上移动一条记录,记录指针指向开始标志,,BOF(),函数值为,.T.,,,RECNO(),值仍为,1,。若再执行,SKIP-1,命令,系统将显示出错信息,“,已到文件头,”,,此时记录指针仍然指向记录开始标志。,若从最后一条记录向下移动一条记录,记录指针指向结束标志,,EOF(),函数值为,.T.,,,RECNO(),值为表记录数加,1,。若再执行,SKIP,命令,系统将显示出错信息,“,已到文件尾,”,,此时记录指针仍然指向记录结束标志。,如果表有一个主控索引,,SKIP,命令将使记录指针移动到索引顺序决定的记录上。,对于条件定位来说,可使用,CONTINUE,命令从当前记录继续进行条件定位到下一条满足条件的记录。,2026/4/7 周二,32,界面方式的记录修改,对于当前工作区中的表,可在浏览窗口中修改记录,批量修改:在浏览表状态下,用菜单“,表,”“,替换字段,”,6.,记录的修改,2026/4/7 周二,33,使用命令修改记录,UPDATE,命令,UPDATE,表名,SET,字段名,1=,表达式,1;,字段名,2=,表达式,2,WHERE,条件,REPLACE,命令,REPLACE,字段名,1,WITH,表达式,1,ADDITIVE,;,字段名,2 WITH,表达式,2 ADDITIVE,范围,FOR,条件,6.,记录的修改,【,注,】REPLACE,命令只能用于修改当前工作区打开的表,而,UPDATE,命令在执行时,不需事先打开表,,系统会自动在最小未使用的工作区中打开表;,ADDITIVE,仅对备注型字段有效,使用时表示替换的内容追加到原备注中,否则替换原内容;,2026/4/7 周二,34,UPDATE,命令中没有“范围”选项;缺省,WHERE,选项时更新所有记录,执行完记录指针指向最后一条记录;带有,WHERE,选项时更新满足条件的所有记录,执行完记录指针指向满足条件的最后一条记录上。,REPLACE,命令中有“范围”选项和”,FOR,条件“选项,用法比较复杂:两者都有时,表明更新指定范围内满足条件的记录,执行完指针指向指定范围的末尾记录;两者均缺省时,仅对当前记录(一条记录)进行替换;只有“范围”选项,替换指定范围内所有记录,执行完指针指向指定范围的末尾记录;只有,FOR,子句,则替换表中所有满足条件的记录,执行完指针指向表中最后一条记录。,UPDATE,命令执行时虽然可自动打开要更新的表,但不会改变当前工作区。,2026/4/7 周二,35,标记要删除的记录(逻辑删除),浏览表时,手动删除,浏览表时,用菜单“表”“删除记录”打开“删除”对话框进行删除,DELETE-SQL,命令删除:,DELETE FROM,表名,WHERE,条件,DELETE,命令删除:,DELETE,范围,FOR,条件,IN,工作区,|,别名,7.,记录的删除与恢复,【,注,】DELETE-SQL,命令执行时,不需事先打开表,,系统会自动在最小未使用的工作区中打开表,但不改变当前工作区;其,WHERE,选项的使用情况同,UPDATE,命令。,DELETE,命令执行时必须先打开表,其“范围”和“,FOR”,子句的使用同,REPLACE,命令。,2026/4/7 周二,36,恢复带删除标记的记录,RECALL,范围,FOR,条件,(,两个可选项的使用同,DELETE,命令),彻底删除记录(物理删除),在表浏览状态,用菜单“表”“彻底删除”,对当前工作区中的表,,,用命令,PACK,用,ZAP,命令,物理删除当前工作区中打开表的所有记录而不论记录是否有删除标记,对带有删除标记的记录的访问,对带有删除标记的记录,在默认情况下有些命令仍然可以对其进行操作,而有些命令则忽略这些记录。,可用,SET DELETED,ON,|,OFF,来指定,VFP,是否处理带有删除标记的记录,但该设置也不是对所有命令或函数起作用。,DELETE(),函数可用于测试记录是否被删除。,2026/4/7 周二,37,该命令只能用于当前工作区中打开的表的数据复制,缺省,FIELDS,子句则复制表中所有字段,但如果复制产生的文件不是默认的表文件,则即使备注字段包含在字段列表中,也不把备注字段复制到新文件中,SDF,选项指明产生的新文件类型为文本文件,(.TXT),而,XLS,选项指明产生文件为电子表格文件(,.XLS,),8.,数据的复制,COPY TO,文件名,FIELDS,字段列表,范围,;,FOR,条件,SDF,|,XLS,例,:,USE,xs,COPY TO,xs01,FOR,xb,=女,COPY TO,xs01,FIELD,xh,xm,SDF,COPY TO,xs01,XLS,2026/4/7 周二,38,记录的物理顺序,按输入记录时间顺序实际存放的顺序,用记录号来标识不同的记录,函数,RECNO(),可测试当前记录号。,记录的逻辑顺序,为实现对表记录的快速查询,可根据需要对表文件中的记录按某个字段(单字段索引)或某些字段(多字段索引)值排序,这就是逻辑顺序。,3.3.6,索引的创建与使用,1.,索引概述,【,注,】,索引排序并没有真正更改表记录的物理顺序,只是建立了一个逻辑顺序与原表物理顺序的记录号之间的对照表,并把对照表保存到一个索引文件中。,2026/4/7 周二,39,字符,+,字符:,数值,+,字符:,数值,+,数值:,日期,+,字符:,其它:逻辑型、物理顺序等,一升序一降序问题:,2.,索引表达式,索引表达式也叫索引关键字,它是建立一个索引的排序依据,通常是一个字段或由多个字段组成的表达式。,需注意,:,不能基于备注字段或通用字段建立索引,。如索引表达式是基于多个字段的,系统将根据整个表达式的值进行排序。书写表达式时要注意:,2026/4/7 周二,40,普通索引:索引表达式的值允许重复,即在普通索引上查找的记录不具有唯一性。一个表可以创建多个普通索引。,唯一索引:索引表达式的值可以重复,但在索引文件中重复的值仅存储一次。一个表可以创建多个唯一索引。,3.,索引类型,在,VFP,中,表的索引类型总共有,4,种:,主索引,、,候选索引,、,唯一索引,、,普通索引,。其中,,主索引只能在数据库表中创建,。,当数据库表移出数据库变成自由表时,索引仍然有效,只是主索引将自动变成候选索引。,2026/4/7 周二,41,候选索引:以表的,候选关键字,为索引表达式而创建的索引,所以,对于表中记录来说,指定的索引表达式的值不可重复。如果在任何已经含有重复数据的字段中指定候选索引,系统将产生错误信息;如果表已经建立了候选索引,在追加新记录或修改记录时,系统会检测索引表达式的值是否有重复,如有重复则拒绝接收数据的输入或修改。一个表可以建立多个候选索引。,主索引:对于数据库表来说,可以从候选索引中选取一个作为主索引。每个数据库表只能创建一个主索引,且主索引的索引表达式在表的所有记录中不允许有重复的值,也不允许,NULL,值。,注:在实际应用中,一个表一般创建一个主索引,根据需要可创建多个普通索引。,2026/4/7 周二,42,结构复合索引文件,将表的一个或多个索引的索引信息存储在一个索引文件中,且索引文件名与表名相同,扩展名为,.CDX,。结构复合索引能自动地与表同步打开、更新和关闭。不要建立无用的索引,过多索引将会降低系统性能。,非结构复合索引文件,与结构复合索引文件一样,索引文件扩展名为,.CDX,,但其文件名不与表同名,非结构复合索引也不会随表的打开而自动打开。,独立索引文件,只存储一种索引的索引文件,其扩展名为,.IDX,,文件名由用户指定。与非结构复合索引一样,独立索引也不会随表的打开而自动打开。,4.,索引文件的类型,2026/4/7 周二,43,排序:对索引表达式值的整体升序或降序,默认为升序。,索引名:也叫索引标识(,Tag,),其长度最多,10,个。,筛选:指定仅有符合条件的记录参加索引。,5.,使用表设计器创建结构复合索引,2026/4/7 周二,44,使用,USE,命令打开表时,通过,ORDER,子句指定主控索引。如:,USE,xs,ORDER,xh,&,主控索引为,xh,界面方式:表浏览状态,菜单“表”“属性”“工作区属性”“索引顺序”,如果表已经打开,用,SET ORDER TO,命令设置主控索引,:,SET ORDER TO,索引标识名,IN,工作区,|,别名,ASCENDING,|,DESCENDING,6.,索引的使用,起作用的索引,(,1,),设置,主控索引,2026/4/7 周二,45,SEEK,表达式,ORDER,索引标识名,IN,工作区,|,别名,ASCENDING,|,DESCENDING,如:,USE,xs,ORDER,xh,SEEK “040701004”,(,2,),利用索引,快速定位,【,注,】,SEEK,命令可在表中搜索指定表达式的值首次出现的记录,这个记录的索引关键字必须与指定表达式类型匹配。,SEEK,命令只能在索引过的表中使用,且只能基于索引关键字进行搜索。如果找到与索引关键字相匹配的记录,则,RECNO(),返回定位的记录号,,FOUND(),函数返回,.T.,,,EOF(),函数返回,.F.,;否则,RECNO(),函数返回表中记录数加,1,,,FOUND(),函数返回,.F.,,,EOF(),函数返回,.T.,。,2026/4/7 周二,46,3.3.7,自由表,自由表就是不隶属于任何一个数据库的表。自由表的创建与数据库表的创建相似,但自由表不能创建数据库表的那些扩展属性,也不能创建主索引,不能建立表间的永久性关系与设置参照完整性等。,自由表可以添加到数据库中,使之成为一个数据库表(此时该表可以设置数据库表的一切属性),;,反之,可以将一个数据库表从数据库中移出,使之成为一个自由表。注意:一个数据库表变成自由表后,一切扩展属性均自动丢失,索引仍然保留,如果有主索引将自动变成候选索引。,2026/4/7 周二,47,用,CREATE-SQL,命令创建表结构,CREATE TABLE,表文件名,(,字段名,1,字段类型,;,(,字段宽度,小数位数,)NULL|NOT NULL,;,字段名,2,),例:学生表结构的创建用命令实现。,Create Table,xs(xh,C(8),xm C(8),xb C(2),zydh C(6),Create Table,js(gh,C(5),xm C(8),gzrq,D,jbgz,N(7,2),jl M),【,注,】,上面建立的表结构是针对“自由表”而言,而“数据库表”是属于某一数据库的,所以要在项目列表中先选择已存在的数据库,然后再点“新建”,后面方法同上。,“数据表”还可以通过添加已有的“自由表”而产生。,3.3.8,利用命令创建和修改表结构,2026/4/7 周二,48,用,ALTER TABLE-SQL,命令更改表的结构,添加字段,ALTER TABLE,xs,ADD,COLUMN,bjmc,c(12),重命名字段,ALTER TABLE,xs,RENAME,COLUMN,bjmc,TO,bj,删除字段,ALTER TABLE,xs,DROP,COLUMN,bj,修改字段,ALTER TABLE,xs,ALTER,COLUMN,xh,c(6),3.3.8,利用命令创建和修改表结构,2026/4/7 周二,49,一对一关系,设,A,、,B,两张表,,A,表中的一个记录在,B,表中只有一个记录与之对应,,B,表中的一个记录在,A,表中也只有一个记录与之对应。在很多情况下,两张表可以简单地合并成一个表,。,一对多关系,如,A,表中的任意一个记录在,B,表中可有多个记录与之对应,而,B,表中的每个记录,在,A,表中仅有一个记录与之对应,则称两表之间存在一对多关系。,A,为主表,,B,为子表。,3.4,永久性关系与参照完整性,3.4.1,表之间的永久性关系,1.,表之间关系的类型,2026/4/7 周二,50,多对多关系,若,A,表的一个记录在,B,表中可对应多个记录,而,B,表中的一个记录在,A,表中也对应多个记录,则称为多对多关系。,遇到多对多关系时,必须建立第三张表,把多对多关系分解成两个一对多关系。第三张表就称作,“,纽带表,”,。把两张表的主关键字都放在这个纽带表中。,对于纽带表,除了包含两个外部关键字外,还可以有其他字段。纽带表的主关键字可以由两个外部关键字组成。,2026/4/7 周二,51,它是库表之间的一种关系,不仅在运行时存在,而且一直保留,拥有永久关系的表必须的数据库中。,表间的永久关系是通过索引建立的,永久关系的类型决定了所使用的索引的类型:在一对多中,主表必用主索引关键字(或侯选索引关键字),子表则用普通索引关键字;一对一中,两张表都用主索引关键字(或侯选索引关键字)。,2.,表之间的永久关系,(,1,)永久关系的作用,在“查询(视图)设计器”中,自动作为默认联接条件;,作为表单和报表的默认临时关系,在“数据环境设计器”中显示,用来存储参照完整性信息。,2026/4/7 周二,52,(,2,)永久关系的建立,确定两张具有一对多或一对一关系的表,建立主表的主索引或侯选索引,如是一对多,在子表中以外部关键字建立普通索引,;,如是一对一,在子表中以与主表相同的关键字建立主索引或侯选索引。建立主表与子表的永久关系,即在数据库设计窗口中,将主表的主索引或候选索引标识拖放到子表相应的索引标识上。,(,3,)删除、编辑永久关系,在,“,数据库设计器,”,中单击关系连线后(这时连线变粗),按,键;编辑关系时,可双击连线打开,“,编辑关系,”,对话框进行编辑修改。,2026/4/7 周二,53,“,参照完整性,”,是用来控制数据的一致性,尤其是控制数据库相关表之间的主关键字和外部关键字之间数据一致性的,规则,。,1.,参照完整性的一般要求(一对多或一对一,),子表的每一个记录在对应的父表中有一个父记录。,在父表中修改记录时,如改了主关键字的值,则子表中相关记录的外部关键字值必须同时改。,在子表中插入记录时,其外部关键字必须是主表主关键字值中的一个。,在父表中删除记录,与该记录相关的子表中的记录必须全部删除。,3.4.2,参照完整性,2026/4/7 周二,54,用,“,参照完整性生成器,”,完成。参照完整性规则包括,更新规则,、,删除规则,、,插入规则,。,2.,参照完整性的设置,更新规则,删除规则,插入规则,(当父表中记录的关键字被更新时触发),(当父表中记录被删除时触发),(当父表中插入或更新记录时触发),级联,用新的关键字值更新子表中所有相关记录,删除子表中所有相关记录,限制,若子表中有相关记录,则禁止更新,若子表中有相关记录,则禁止删除,若父表中不存在匹配的关键字,则禁止插入,忽略,允许更新,不管子表中的相关记录,允许删除,不管子表中的相关记录,允许插入,2026/4/7 周二,55,父表:显示一个关系中的父表名,子表:显示一个关系中的子表名,更新:可取“级联”、“限制”、“忽略”,删除:可取“级联”、“限制”、“忽略”,插入:可取“限制”、“忽略”,父标记:建立该永久性关系的父表的主索引(或候选索引)标识名,子标记:建立该永久性关系的子表的索引标识名,【,注,】,在利用“参照完整性生成器”对话框设置参照完整性规则时,系统会自动地生成完成该规则的程序代码。规则的代码被保存在数据库的存储过程中,而规则的实施由主表和子表的,触发器,完成(系统会自动地设置表的触发器。),2026/4/7 周二,56,完整性包括:实体完整性、参照完整性和用户自定义完整性。,实体完整性包括两级,:,(通过对应的有效性规则实现),字段的数据完整性:输入到字段的数据的类型或值必须符合某个特定的要求。,记录的数据完整性:为记录赋予数据完整性规则。,参照完整性:,指相关表之间的数据一致性。,用户自定义完整性:,指由用户通过编程实现对数据完整性的约束。,3.4.3 Visual FoxPro,数据完整性综述,2026/4/7 周二,57,SELECT,(0|1|,别名,),:测试工作区号,0,当前工作区号。,1,当前未被使用最大工作区号。,别名,表别名所在的工作区号,别名必加引号。,USED,(,区号,|,别名,),:测试指定表或工作区是否打开。,ALIAS,(,区号,),:测试指定工作区中的表别名。,FIELD,(,字段顺序号,区号,|,别名,),:返回已打开表的指定序号的字段名。,FCOUNT,(,区号,|,别名,),:返回已打开表的字段数。,DELETE,(),:测试表的当前记录是否带删除标记。,3.5,有关数据库及其对象的常用函数,2026/4/7 周二,58,DBC(),与,DBUSED(),函数,DBC():,返回当前打开的数据库的完整文件名(字符型),DBUSED():,返回指定数据库文件是否已打开(逻辑型),DBGETPROP(),函数,返回当前数据库或数据库中字段、表、视图的属性。,语法,:,DBGETPROP(,cName,cType,cProperty,),cName,:,指定数据库、字段、表或视图的名称,cType,:,指定,cName,是否为当前数据库,或当前数据库中的一个字段、表或视图,cProperty,:,指定属性名称,例如,:,?,DBGETPROP(Cj.cj,FIELD,Caption,),查看,Cj,表的,cj,字段的标题,字段名前面的表名不要省。,2026/4/7 周二,59,DBSETPROP(),函数,给当前数据库或当前数据库中的一个字段、表或视图设置属性。在主窗口中显示,.T.,或,.F.,。,语法,:,DBSETPROP,(,cName,cType,cProperty,ePropertyValue,),ePropertyValue,:,指定,cProperty,的设定值,例如,:,?,DBSETPROP,(“,X,s.xh,FIELD,Caption,学号,),【,注,】,DBGETPROP(),函数的类型允许值有,DATEBASE,、,TABLE,、,FIELD,、,VIEW,;,DBSETPROP(),函数的常用属性名有,Caption,、,DefaultValue,、,PrimaryKey,、,RuleExpression,、,RuleText,2026/4/7 周二,60,Thank You!,2026/4/7 周二,61,
展开阅读全文