《表和数据库》PPT课件.ppt
第第11-1211-12章章 数据库和表数据库和表 主要内容介绍数据库、数据表的基本概念数据库和数据表的建立编辑表中的数据、记录修改与删除表的索引等有关操作。概念数据库(.dbc)就就是是一一个个关关于于某某一一特特定定主主题题或或目目标标的的信信息息集集合合。一一个个数数据据库库是是由由一一个个或或多多个个表表组组成成的的,数数据据库库可可以以看看成是数据表的容器成是数据表的容器.表(.dbf)一组相关联的数据按行和列排列的二维表格一组相关联的数据按行和列排列的二维表格 记录记录(record):表的每一行称为一个记录表的每一行称为一个记录.l字段字段(field):表的每一列称为一个字段表的每一列称为一个字段.l关键字关键字(key):若某个字段值能唯一地确定一个记录若某个字段值能唯一地确定一个记录,该字段称为关键字该字段称为关键字.l索引索引(index):将一个表按照某种特定的顺序排列将一个表按照某种特定的顺序排列.数据库表和自由表数据库表和自由表l属于一个数据库的表称为数据库表属于一个数据库的表称为数据库表l独立存在的表称为自由表独立存在的表称为自由表 类型代号说明字段宽度字符型C汉字或字符最多254个字符,汉字占2个字符数值型N整数或小数最多20位,小数点和正负号各占一位货币型Y保留4位小数8个字节日期型D格式为MM/DD/YY8个字节日期时间型T日期和时间8个字节逻辑型L逻辑值“真”或“假”1个字节浮点型F整数或小数,同数值型整型整型I存放整数4个字节双精度型B存放精度较高的数值8个字节备备注型注型M接收字符型数据,存放在文件名与表明相同的“.FPT”文件中4个字节通用型通用型G存放图形、声音等OLE对象(对象链接与嵌入),与备注型存放位置相同4个字节字符型(二进制)同前述“字符型”,但是当代码页更改时字符值不变同“字符型”备注型(二进制)同前述“备注型”,但是当代码页更改时备注不变同“备注型”创建数据表设计数据表结构设计数据表结构使用使用“表设计器表设计器”新建表新建表在表中添加记录在表中添加记录修改表结构修改表结构基本命令基本命令创建数据表创建数据表:create打开数据表打开数据表:use 关闭数据表关闭数据表:use添加添加(空空)记录记录:append blank修改表结构修改表结构:modify structure 查看表中的数据使用使用“浏览浏览”窗口窗口(相应命令相应命令:browse)编辑编辑/浏览方式浏览方式添加方式添加方式 BROWS FIELDS 姓名姓名,期中期中 BROW LOCK 2 BROWSE FREEZE 期中期中 其他查看记录的命令:其他查看记录的命令:LIST 与与DISPLAYLISTFIELDS FieldList Scope FOR lExpression1 WHILE lExpression2DISPLAY FIELDS FieldList Scope FOR lExpression1 WHILE lExpression2 范围是如下之一:lALL 全部记录lNEXT n 包括当前记录开始的n条记录lRECORD n 只对第n条记录操作lREST 当前记录开始到文件尾。For 对范围内的所有记录执行该命令;若没有指定范围默认为ALLWhile 对范围内的记录依次执行该命令,一旦遇到不满足条件者,即停止执行命令;若没有指定范围默认为REST 移动指针移动指针移动指针的命令:l绝对移动:绝对移动:Go bottom|top|l相对移动:相对移动:Skip n|-n与指针相关的部分函数与指针相关的部分函数Bof()测试指针是否指向文件头测试指针是否指向文件头Eof()测试指针是否指向文件尾测试指针是否指向文件尾Reccount()返回数据表的记录数返回数据表的记录数Recno()返回当前指针的指向的记录号返回当前指针的指向的记录号 修改表结构修改表结构使用表设计器:MODIFY STRUCTURE使用命令:ALTER TABLE(修改结构)CREATE TABLE(建立结构)CREATE TABLE Student(xh c(10),xm c(6),xb l,csrq d(8),zy c(20),sm m,zp g)可以建立包含xh、xm、xb、csrq、zy、sm、zp等字段的一个新的数据表Student.dbf。编辑表中的数据编辑表中的数据REPLACE 字段名1 WITH 表达式1,字段名2 WITH 表达式2.范围 FOR 条件 WHILE 条件若没有范围,只对当前记录操作。生成新表与追加记录生成新表与追加记录以当前表为基础,生成新表:以当前表为基础,生成新表:lCOPY TO FIELDS FOR l复制当前表结构复制当前表结构:lCOPY STRUCTURE TO FIELDS从其他表中追加记录:从其他表中追加记录:lAPPEND FROM FIELDS FOR 删除记录删除记录逻辑删除与物理删除逻辑删除与物理删除逻辑删除:将记录打上删除标记逻辑删除:将记录打上删除标记物理删除:将记录从表中移去物理删除:将记录从表中移去菜单操作菜单操作l在浏览窗口中删除记录:单击记录左边的在浏览窗口中删除记录:单击记录左边的方框。方框。l菜单菜单“表表”“删除记录删除记录”l菜单菜单“表表”“彻底删除彻底删除”逻辑删除:DELETE 范围 条件恢复打上删除标记记录:RECALL物理删除:PACK删除所有记录:ZAP与删除记录有关的系统设置:lSET DELETE ON|OFF默认使用命令删除记录 删除记录命令示意正常记录打上逻辑删除标记的记录DELETERECALL物理删除不能恢复的记录PACKZAPDELETE ALLPACK 有选择的只对部分记录操作有选择的只对部分记录操作lSET FILTER TO 界面界面:表表/属性属性/数据过滤器数据过滤器取消过滤条件取消过滤条件:SET FILTER TO 有选择的显示部分字段有选择的显示部分字段lBROWSE|LIST|DISPLAY FIELDS lSET FIELDS TO 界面界面:表表/属性属性/字段筛选字段筛选显示所有字段显示所有字段:lSET FIELDS TO ALL过滤数据表 11.6 数据表的索引数据表的索引建立索引的最直接的理由是为了排序。在建立数据表时,记录一般是随机输入,其建立索引的最直接的理由是为了排序。在建立数据表时,记录一般是随机输入,其排列顺序无规律。如果要按照某些字段值的顺序排列,就要对数据表进行排序操作排列顺序无规律。如果要按照某些字段值的顺序排列,就要对数据表进行排序操作或者建立索引。或者建立索引。11.6.1 基本概念基本概念1.索引与索引表达式索引与索引表达式 数据表的索引是按指定的索引表达式对数据表建立的一个文件数据表的索引是按指定的索引表达式对数据表建立的一个文件索引索引文件。索引文件是一个记录号的列表(指针列表),它指向待处理的记录,文件。索引文件是一个记录号的列表(指针列表),它指向待处理的记录,并确定了记录的处理顺序,即按新顺序存储着数据表所对应的记录号。索并确定了记录的处理顺序,即按新顺序存储着数据表所对应的记录号。索引表达式可以是表中的字段或字段的组合,前者又称为索引字段。引表达式可以是表中的字段或字段的组合,前者又称为索引字段。索引并不改变表中所存储数据的顺序,它只改变索引并不改变表中所存储数据的顺序,它只改变VFP读取每条记录的顺读取每条记录的顺序。序。可以利用索引对数据表中的数据进行排序,以便加速检索数据的速度。可以利用索引对数据表中的数据进行排序,以便加速检索数据的速度。可以用索引快速显示、查询或者打印记录。还可以选择记录、控制重复字可以用索引快速显示、查询或者打印记录。还可以选择记录、控制重复字段值的输入并支持表间的关系操作。索引对于数据库内表之间创建关联也段值的输入并支持表间的关系操作。索引对于数据库内表之间创建关联也很重要。很重要。建立索引文件 索引类型l主索引主索引:可保证字段输入值的唯一性可保证字段输入值的唯一性,一个数据表只一个数据表只能有一个主索引并且只能在数据库表中建立。能有一个主索引并且只能在数据库表中建立。l候选索引候选索引:可保证字段输入值的唯一性可保证字段输入值的唯一性,允许建立多允许建立多个候选索引个候选索引l普通索引普通索引:允许出现重复的字段值。允许出现重复的字段值。l唯一索引唯一索引:打开索引后打开索引后,相同字段值的记录只显示一相同字段值的记录只显示一个。个。数据表的索引 新建索引:l在表设计器中建立索引在表设计器中建立索引l命令方式命令方式:INDEX ON TAG ASCENDING|DESCENDINGl 打开打开|关闭索引关闭索引lSET ORDER TO 建立复杂的索引建立复杂的索引l包含多个字段的索引表达式包含多个字段的索引表达式l如:按性别与入校成绩进行索引如:按性别与入校成绩进行索引,其表达式应为其表达式应为 INDE ON INDE ON 性别性别+STR(+STR(入校成绩入校成绩)TAG XBCJ)TAG XBCJ建立和打开索引 索引应遵循原则(1)为了提高速度,用普通索引、候选索引或主索引(2)控制字段的重复值对数据库“表”用“主索引”或“候选索引”,对于“自由表”,用“候选索引”。与索引相关的查找命令lFIND|lSEEK l若找到相应记录若找到相应记录,则则FOUND()函数值为函数值为.T.顺序查找命令顺序查找命令:LOCATE FOR 继续查找命令继续查找命令:CONTINUE查找记录查找记录【例例11-15】下述命令在学生表下述命令在学生表std_da中查找中查找第一个姓李的同学,并显示该同学的信息:第一个姓李的同学,并显示该同学的信息:USE std_daINDEX ON xm TAG xmSET ORDER TO TAG xmFIND 李李DISP【例例11-16】下述命令在学生表下述命令在学生表std_da中查找第一中查找第一个出生日期为个出生日期为1981年年3月月12日的同学,并显示该同日的同学,并显示该同学的信息:学的信息:USE std_daINDEX ON csrq TAG csrqSET ORDER TO TAG csrqSEEK CTOD(03/12/1981)?FOUND()DISP【例例11-17】下述命令在学生表中查找姓李的下述命令在学生表中查找姓李的同学,并显示该同学的信息:同学,并显示该同学的信息:CLEARUSE STD_DALOCATE FOR xm=李李DISPCONTINUEDISP VFP可以同时打开32767个表,每个表都在不同的工作区中。工作区切换:SELECT|l编号编号1-327671-32767;或;或A-JA-J;或用或用AliasAlias指定的名称指定的名称lUse Use in in alias alias 指定非当前工作区中表的字段值:指定非当前工作区中表的字段值:l别名别名-字段名字段名 或或 别名别名.字段名字段名 多表操作 SET RELATION TO 关键字表达式 INTO 工作区别名1|表别名1 设置表间临时关系的步骤:l1.在不同工作区打开父表和子表在不同工作区打开父表和子表l2.子子表表按按关关键键字字表表达达式式中中的的关关键键字字段段建建立立索索引引(或指定已存在的索引为主控索引或指定已存在的索引为主控索引)l3.在父表工作区执行命令在父表工作区执行命令SET RELATION TO INTOl表间临时关系可以实现指针的联动例1:显示所有学生的姓名、专业、平时成绩。例2:为所有会计专业学生平时加10。设置表间临时关系 SELE 1USE STD_DAINDE ON 学号学号 TAG XHSELE 2USE STD_CJSET RELATION TO 学号学号 INTO ALIST 姓名姓名,A.专业专业,平时平时repl all 平时平时 WITH 平时平时+10 FOR A.专业专业=会计会计【例12-2】设有一个单科(VFP编程)成绩表:d_cj.dbf(xh(C,10),cj(N,3),试用d_cj.dbf中的成绩来修改cj.dbf中的相应成绩。相应的命令如下:*lsgx_修改成绩.PRGUSE TCH_PKLOCATE FOR 课程名=VFP编程no=课程代号SELECT 2USE d_cjINDEX ON 学号 TAG xhSELECT 1USE cj2SET RELATION TO 学号 INTO bREPL ALL 成绩 WITH b-成绩 FOR 学号=b-学号 AND 课程代号=NO 注意:有的时候需要将“多表”设为主表,“一表”设为从表。3.关联单个表中的记录关联单个表中的记录 可以在单个表中创建记录间的关系,即自引用关系。若需要的所有信息都存储在单个表中,这种关系很有用。【例12-3】如果遍历xs表中的班级,随着记录指针从一个班级到另一个班级的移动,每个班级的学生自动更改。若要创建自引用关系,可以两次打开同一个表,在一个工作区中打开一个表,并使用USE AGAIN命令在另外工作区中再次打开此表,然后使用索引来关联记录。例如,可以使用以下代码,根据“zy”(专业)字段对xs表进行排序,然后创建索引标识ZY2,并以此建立并浏览一个自引用关联:lsgx_自关联.prgSELECT 0USE xs ALIAS xsSELECT 0USE xs AGAIN ALIAS xs_aINDEX ON zy TAG ZY2SET ORDER TO ZY2SELECT xsSET RELATION TO zy INTO xs_a ADDITIVESELECT xs_aBROWSE NOWAITSELECT xsBROWSE NOWAIT 在“命令窗口”依次执行上述命令,在“数据工作期”窗口中浏览表xs和xs_a,当在xs“浏览”窗口中移动记录指针时,会自动刷新xs_a“浏览”窗口,并在其中显示隶属于选定专业的学生,如图12-2所示。新建数据库CREATE DATABASE注:数据库建立后,自动产生同名但类型不同的三个文件:.DBC(数据库文件)、.DCT(数据库备注文件)、.DCX(数据库索引文件)。后两个文件依附于数据库文件,但不可缺少,数据库备份时一定要同时备份其他两个文件,否则备份后的数据库将不能使用。打开数据库OPEN DATABASE 数据库文件名数据库文件名?EXCLUSIVESHAREDSET DATABASE TO 数据1 MODIFY DATABASE&打开设计器关闭数据库CLOSE DATABASE数据库的基本操作 关于数据表的操作关于数据表的操作在数据库中添加表在数据库中添加表ADD TABLE 表文件名表文件名|?NAME 长文件名长文件名从数据库中移去表从数据库中移去表REMOVE TABLE 表文件名表文件名|?DELETE 在数据库中设置表的属性在数据库中设置表的属性数据库表具有如下的优点:长表名和表中的长字段名(最多可以有128个字符)表中字段的标题和注释。默认值、输入掩码和表中字段格式化。表字段的默认控件类。字段级规则和记录级规则。支持参照完整性主关键字索引和表间关系。INSERT、UPDATE或DELETE事件的触发器。永久关系是存储在数据库文件中的关系,永久关系在“数据库设计器”中显示为表索引间的连接线,当在数据环境中打开这些表时,永久关系也作为默认关系显示。与SET RELATION命令设置的临时关系不同,永久关系在每次使用表时不需要重新创建。但是,由于永久关系并不控制表中记录指针间的关系,因此在开发VFP应用程序时,不仅需用永久关系,也需使用临时的SET RELATION关系。建立表间关系的前提:l两个表具有一些公共信息的字段两个表具有一些公共信息的字段l主表以公共字段建立主索引主表以公共字段建立主索引/子表建立普通索引子表建立普通索引在数据库设计器中建立表间关系关联表(建立表间永久关系)在对父表进行更新、删除、插入操作时,为保证数据完整性而遵循的规则:l级联级联:对父表中的主关键字段或候选关键字段对父表中的主关键字段或候选关键字段的更改,会在相关的子表中反映出来的更改,会在相关的子表中反映出来l限制限制:禁止更改父表中的主关键字段或候选关禁止更改父表中的主关键字段或候选关键字段中的值,这样在子表中就不会出现孤键字段中的值,这样在子表中就不会出现孤立的记录。立的记录。l忽略忽略:即使在子表中有相关的记录,仍允许更即使在子表中有相关的记录,仍允许更新父表中的记录。新父表中的记录。数据库的参照完整性 理 解数据库提供一个环境文件类型 DBC由多表及其关系组成表提供记录信息文件类型 DBF可不放数据库中自由表数据库数据表