2007/01/05 | 数据库间记录更新
类别(数据库学习笔记) | 评论(1) | 阅读(119) | 发表于 09:17
数据库间记录更新
    FoxBASE提供根据一个数据库的数据更新另一个数据库的命令,被更新的数据库在当前工作区,称为目标数据库;数据来源数据库称为源数据库,需要用别名指定。

    一、更新命令

     用别名数据库的数据,按照表达式来更新当前数据库的指定字段值。

     命令格式:

     UPDATE ON<关键字>FROM<别名>REPLACE<字段名1>WITH<表达式1>[,<字段名2>WITH<表达式2>…][RANDOM]

     命令注释:

     (1)关键字字段必须是两个数据库的同名字段或相同语义字段。执行命令时,对当前数据库的每个记录都到别名数据库中寻找关键字匹配的第一个记录,进行记录定位。

     (2)更新对象写在REPLACE短语的WITH之前,将当前库的字段替换成WITH之后表达式的计算结果,表达式通常包含别名数据库中的字段。可以同时更新多个字段,各个WITH短语用逗号分开。

     (3)若无RANDOM选项,两个数据库都必须按关键字排序或索引。若选用RANDOM,则只需当前数据库 (目标库)按关键字排序或索引。

     (4)由于记录是根据关键字匹配来定位的,如果目标库有多个相同关键字的记录,只更新第一个记录。如果源数据库有多个相同关键字的记录,目标数据库的各个匹配记录依次接受更新,前次更新的内容将被后面的更新内容所覆盖,只能保留最后接受的值。

    二、UPDATE与SET RELATION比较

     UPDATE更新命令要求当前数据库必须排序或索引。运作过程是,从别名数据库依次扫描记录,按照关键字的值到当前数据库定位记录。因此,如果当前数据库有多个相同关键字的记录,只更新第一个记录。如果别名数据库有多个相同关键字的记录,当前数据库的各个匹配记录依次接受更新,但只保留最后接受的值。由此可见,UPDATE适用于当前数据库无重复关键字的情况,即当前库的关键字字段应具有唯一性。当前数据库的记录与别名数据库的记录可以是一对一的,也可以是一对多的。

     SET RELATION关联命令要求别名数据库必须索引。运作过程是,从当前数据库依次扫描记录,按照别名数据库的索引关键字定位。与REPLACE命令结合使用可以自动修改当前数据库的记录。如果当前数据库有多个相同关键字的记录,能够依次修改。如果别名数据库有多个相同关键字的记录,当前数据库的记录只根据别名库中与索引关键字匹配的第一个记录进行替换操作。由此可见,SET RELATION与REPLACE命令结合使用修改记录,适用于两个数据库记录一一对应的情况,也使用于多对一的情况。

     尤其应当注意,由于UPDATE命令本身已经规定了两库记录指针的相关性,不应再用SET RELATION设立关联,否则容易造成逻辑上的混乱,得到意想不到的结果。

     理解以上两条命令的运作过程就不难掌握二者之间的区别了。
0

评论Comments