数据库基本操作

Author: 邓兴国 Date: 1995-03-31

        一、数据库的打开、关闭
        建立了数据库之后,要使用数据之前必须打开数据库,其命令格式为:USE [〈数据库名〉]当省略可选项〈数据库名〉时,表示关闭当前工作区的数据库。
        二、数据库的显示
        数据库的显示包括对数据库结构的显示和对数据库记录的显示。
        1.数据库结构的显示
        打开数据据库之后,我们可以显示其库结构,用如下命令:
        LIST STRUCTURE [TO PRINT]
        或DISPLAY STRUCTURE [TO PRINT]
        利用此命令都能显示数据库的结构。不同的是利用DISPLAY命令可分页显示,选项[TO PRINT]表示显示结果送往打印机。
        2.数据库记录的显示
        对于一个已经输入了数据的库,打开它可以显示其各条记录的内容。用如下命令:LIST [〈范围〉][FIELDS〈字段名表〉][FOR/WHILE〈条件〉][TO PRINT][OFF]
        或DISPLAY [〈范围〉][FIELDS〈字段名表〉][FOR/WHILE〈条件〉][TO PRINT][OFF]
        两条命令都可以显示指定范围内满足条件的由〈字段名表〉给定的字段的内容,且〈范围〉省略时只显示当前记录,选项[OFF]表示不显示记录号。
        三、记录指针定位
        打开一个数据库时,数据库内部有一个指示当前记录的指针总是指向第一条记录,当要对其它记录操作时,需要进行记录定位。
        1.绝对定位记录
        所谓绝对定位是指直接定位到所要求的记录的物理位置,与当前记录所在位置无关。可用如下命令:
        GO 〈表达式〉
        或GO TO〈表达式〉
        或〈表达式〉
        三种命令都可以绝对定位记录指针到由表达式给定的值的记录,当〈表达式〉的值超过记录总条数时,提示记录号越界。另外,为了进一步简化操作,FOXBASE+提供了另外两条直接定位到数据库首和尾的命令:
        GO TOP/BOTTOM
        和GO TO TOP/BOTTOM
        2.相对记录定位
        所谓相对记录定位是指以当前记录指针所在位置为参照,向前(文件尾方向)或向后(文件头方向)移动。命令如下:
        SKIP[〈数值表达式〉]
        该命令相对当前记录向前(当表达式值为正)或向后(当表达式值为负)移动由数值表达式值给定的记录条数,到文件头或尾后若还移动则提示记录越界。
        四、数据库的查询
        数据库中的记录是按数据输入先后顺序存放,这种存放顺序造成了对数据库查询的低效,为了改善效率,可采用两种方式:一是采用分类法,另一是建立索引文件,两种方法效果相仿,在系统开销方面各有优劣,当数据量大时,常用后者。
        1.库文件的分类排序
        对库文件的分类排序,即将数据库记录按一定条件排序存放,产生一个新数据库。命令格式如下:
        SORT TO 〈新库文件名〉ON 〈字段〉 [/A][/D][/C][〈范围〉][FOR/WHILE〈条件〉]
        使用该命令可以将给定范围满足条件的记录以字段为关键字按给定的顺序重新排列产生新库文件,原有库文件不变。其中:
        〈新文件名〉:表示排序后将产生的新数据库
        ON〈字段〉:表示排序的根据,可以是字符型,数值型和日期型。
        [/A]:表示按升序排列
        [/D]:表示按降序排列
        [/C]:表示忽略字母大小写
        2.索引文件
        用分类排序方法可以将数据库记录排序,但如果库文件较大时,所用的时间较长且占用空间大,为此,FOXBASE+提供了索引文件方式,只产生一个存放记录指针的索引文件标识每条记录的位置,从而达到排序。
        3.数据记录的查询
        当一个数据库文件的记录很多时,要对某些内容进行手工查找是比较费时的,故应进行一些预处理,如前文件所讲的排序和索引,然后进行查询。FOXBASE+提供了直接查找和间接查找两种方式。
        直接查找格式如下:
        LOCATE[〈范围〉][FOR〈条件〉]
        CONTINUE
        使用LOCATE命令可以在指定的范围内查找第一个满足表达式条件的记录,找到后显示记录号,如需继续查找可用CONTINUE命令。
        索引查找即对进行过分类或索引的库进行查找。FOXBASE+提供了两条命令:
        命令格式1:FIND〈字符串/数字〉
        命令格式2:SEEK〈表达式〉
        三种命令方式都可以实现查询,其中LOCATE命令不论数据库文件是否建有索引均可使用,不论关键字是字符型,数字型,日期型还是他们的组合都能查询,而且可以连续查询,缺点是查找速度较慢。FIND命令只能对排序或索引库文件使用,查询关键字只限于字符型和数字型,不能连续查找,查找数字型内存变量较麻烦,但查找速度快。SEEK命令同FIND命令,但对表达式进行查找,因此适用范围较FIND命令广。
        五、数据库的分析统计
        我们经常碰到要对数据库进行各种统计分析工作,包括对数据库记录的统计、对数据库中数值字段求和、求平均值以及分类求和。
        (一)数据库记录的统计:COUNT [〈范围〉][TO〈内存变量名〉][FOR/WHILE〈条件〉]
        用此命令可以求出当前数据库中在指定〈范围〉内所有满足〈条件〉的记录数,并在屏幕上显示出来,或者存到〈内存变量名〉中。
        (二)数值字段求和:SUM [〈范围〉][〈表达式〉][TO〈内存变量名表〉][FOR/WHILE〈条件〉]
        用此命令对当前数据库中由指定〈范围〉中满足〈条件〉记录,由表达式所指定的累加求和,并存入由〈内存变量名〉指定的变量中,〈表达式〉缺省时,将对所有数字段求和。
        (三)求数值字段平均值:AVERAGE[〈范围〉][〈表达式〉][TO〈内存变量表〉][FOR/WHILE〈条件〉]
        (四)数据库的分类求和:
        前面讲的求和一次只能求一类,有时我们要按分类分别求和,若用SUM命令将会多次重复操作,这样比较麻烦。为此,Foxbase+提供了分类求和命令,其格式如下:TATAL TO〈文件名〉 ON 〈关键字〉 [〈范围〉][FIELDS〈字段名〉][FOR/WHILE〈条件〉]
        注意,在使用此命令前,必须先对数据库文件按〈关键字〉进行排序或建立索引文件,整个数据库中所有关键字值相同的记录在新库中合并为一个记录,新记录中字段名表中给定的数值型字段为所求和,其它字段为原数据库中形成它的那几个关键字值相同的记录的第一个记录相应字段的值。
        此命令所产生的新数据库,一般除〈关键字〉字段和〈字段名表〉指定各字段的值有用外,其它字段值几乎没有利用价值,因为它始终是同类关键字的第一个记录的值。
        六、多个数据库间的操作
        在实际应用中,涉及到同时不只使用一个数据库的数据,而一般情况下又只能同时打开一个一个数据库,为了解决这个问题,Foxbase+系统提供多工作区操作以用于多个数据库操作。
        (一)工作区的概念
        工作区Foxbase+系统提供在内存中划分的区域,以供运行Foxbase+命令,同时,Foxbase+规定,在一个工作区中,同时只能打开一个数据库文件,在同一系统中,Foxbase+提供了最多可以开辟10个工作区。
        1.有关工作区的几个概念。
        (1)工作区的标号
        Foxbase+允许开辟10个工作区,分别用序号1到10号作为每个工作区的标号。
        (2)工作区的别名
        除标号外,Foxbase+对每个工作区还规定了一个等效的别名,系统提供了10个固定的别名,分别对应为A到J的10个字母;另外用户还可以在打开一个数据库的同时,给这个工作区定义一个自定义的别名,其定义格式如下:
        USE<数据库名>[ALIAS<别名>]
        当选择项ALIAS<别名>缺省时,系统将数据库文件名作为该工作区别名。
        2工作区的选择命令
        由于一次可定义10个工作区,因此涉及到一个主工作区(当前工作区)的选择,其命令格式为:
        SECLECT<工作区号>/<别名>
        用此命令,可选择当前工作区,即当前操作将针对选择的工作区。
        3多工作区间的操作
        当在工作区中需要对其它工作区数据进行操作时,可用如下命令格式
        <别名>→<字段名>
        在当前工作区使用其它工作区打开库字段时,加上此格式可以对其它工作区数据读取,但不能写入。
        (二)一个库文件对另一个库文件的更新,命令如下:
        UPDATE IN <关键字段>FROM <别名>
        REPLACE <字段名>WITH<表达式>[RANDOM]
        使用此命令将用另一个数据库中的数据更新当前数据库文件中的字段,该命令只对两个文件中关键字段匹配的记录进行更新。
        可选项RANDOM的作用是规定当前源数据库文件没有按关键字段索引或排序。
        注意,在使用该命令之前,目的数据库必须是按<关键字>字段建立索引或排序的,否则将出错。
        (三)数据库文件之间关联的建立
        在数据库操作中会碰到两个数据库的同步操作,即当主工作区中数据记录指针移动时,要求对应关联数据库的指针也移动,为此必须建立数据库的关联,可用如下命令:
        SET RELATION TO [<表达式>/<数值表达式>/RECNO ()]
        INTO <别名>[ADDITIVE]
        使用此命令,用一个表达式链接两个打开的数据库文件,链接表达式必须是两个库共有的字段。
        若使用选项ADDITIVE则将保留以前设置的链接关系。
        用 SET REPLATION TO 命令可取消关联。
        建立关联后,主工作区和关联的工作区数据库记录同时移动。
        (四)两个数据库文件的连接
        可用如下命令:
        JOIN WITH<别名>TO<文件名>[FOR<条件>][FILEDS<字段名表>]
        利用此命令,通过当前库文件和别名所指定工作区库文件,把指定的记录和字段连接起来,建立一个新的库文件。