1、第3章 数据表的创建及操作,本章目标: 掌握表结构和工作区的基本概念; 掌握使用表设计器建立表结构的方法; 掌握表的打开方式 掌握表记录的可视化和命令操作; 掌握索引的概念及使用;,第3章 数据表的创建及操作,3.1 建立数据表 3.2 操作数据表 3.3 工作区 3.4 维护表结构 3.5 表的索引 3.6 数据共享,3.1 建立数据表,3.1.1 表结构的概念 3.1.2 建立表结构 3.1.3 输入数据 3.1.4 打开表 3.1.5 关闭表,3.1.1 表结构的概念,VFP表结构的规定,(1)文件名(.dbf) (2)字段数,一个表文件(自由表)最多可有255个字段数;一个数据库表最多
2、可以有128个字段,存储不同性质的数据。,VFP表结构的规定,(3)字段命名规则: 由是汉字、英文字母、数字和下划线组成,但必须由字母或汉字开头,中间不能有空格; 自由表字段名最大长度为10个字符,数据库表字段名最大长度可为128个字符; 一个表中的字段名必须唯一,避免使用系统保留字,为了便于记忆和使用,字段名最好定义有一定的含义;,VFP表结构的规定,(4)字段的数据类型 注意:若数据表中有一个或多个备注型或通用型字段,VFP系统会自动生成一个与表同名的、用来存放备注或通用字段内容的表备注文件(.FPT)。 (5)字段宽度,规定字段可以存放的最大字符数。 (6)小数位数,小数点占一个字符宽度
3、。,3.1.2 建立表结构,表结构的建立可以用表设计器、命令方式、SQL语句,也可通过其他表的复制。 (1)可视化方法: 菜单方式,“文件”|新建,选择”表”。 项目管理器方式,在“全部”或“数据”选项卡,选择数据库表或自由表,单击新建。 数据库设计器方式 (2)命令方式,表设计器的打开方法,数据库表,数据库表或自由表,自由表设计器,数据库表设计器,命令方式,格式:CREATE /? 功能:在当前文件夹下建立一个新的数据表文件。 例如:CREATE 学生数据表 (表设计器打开) 或,CREATE TABLE 学生数据表(学号 C(9),姓名 C(8),性别 L,系部 C(30) SQL命令 通
4、过复制产生表结构(COPY STRUCTURE TO),命令方式创建自由表,自由表不属于任何一个数据库,通常只是在程序中暂时保存数据。 方法:先关闭所有数据库,然后创建表不关数据库,3.1.2 建立表结构,表设计器的主要用途是定义表的结构和各项数据的字典信息。 表设计器把创建表的过程分为字段、索引和表约束3部分。 注意:是否允许空值NULL,空值NULL是无效值,而非空字符或0。如果该字段允许空值NULL,则表示此字段中的数据可以是未知(即可以不填)的,否则,不可是未知的(必须填)。,3.1.3 输入数据(可视化),1.添加与修改记录步骤一:菜单“显示/浏览或编辑”,进入表浏览或编辑模式。步骤
5、二:追加或修改记录 菜单“显示/追加方式” 菜单“表/追加新记录或者追加记录”,3.1.3 输入数据,2.特殊字段的输入与编辑备注型字段 memo(无数据)Memo(有数据)编辑窗口打开方法:鼠标双击或Ctrl+PgDn通用型字段 gen(无数据)Gen(有数据) 第一步,先打开编辑窗口(鼠标双击或Ctrl+PgDn)。 第二步,菜单“编辑/插入对象”,链接或嵌入;或者使用复制粘贴的方法。 修改:菜单“编辑/清除”,删除对象。,3.1.3 输入数据,3.删除与恢复记录 逻辑删除及恢复逻辑删除:加删除标记,非有效记录,可以恢复: 方法一:点击记录前方框; 方法二:“表”菜单|切换删除标记或删除记
6、录;恢复,反之操作;物理删除 先要将记录逻辑删除。 菜单“表” |彻底删除。,3.1.4 打开表,表的打开是指将在外存上的表文件调入内存;关闭则是将调入内存中的数据保存到外存并释放内存空间。 在新建表和输入数据以后应当及时关闭表文件以免数据丢失,表关闭后如果下次要使用就必须先打开。,表的打开方式,菜单方式 “文件|打开”,选择文件类型表(.dbf) “窗口|数据工作期”,打开 命令方式 格式:USE 功能:在当前工作区打开指定表文件 在菜单“视图”下查看自由表,注意:如果表中有备注或通用字段, 表的同名备注文件(.FPT)也同时被打开;,3.1.5 关闭表,菜单方式,“窗口|数据工作期”,关闭
7、 命令方式 USE /关闭当前打开的表 CLOSE TABLES /关闭当前数据库中表 CLEAR ALL /关闭所有打开的表 CLOSE ALL /关闭所有打开文件,3.2 操作数据表,1.浏览表 2.复制数据表 3.查找记录(记录指针) 4.插入和追加记录 5.修改记录 6.删除和恢复记录,1.浏览表,显示当前表记录 LIST|DISPLAY (连续滚动显示或分屏显示)OFFFORWHILEFIELDSTO PRINTER SET HEADING OFF可以不显示字段名称。 例如:USE 学生基本信息LIST OFF FOR !sex FIELDS sno,; sname,sold,dep
8、t BROWSE,;续行符,显示记录号否,执行结果(信息输出窗口),默认显示记录号,记录号,记录标题,执行结果(浏览窗口),2.复制数据表,将当前打开表的内容复制成一个新表命令方式:USE 学生基本信息COPY TO stu1COPY TO stu2 FIELDS sno,sname,sexCOPY TO stu2 FIELDS sno,sname FOR sex,3.查找记录(记录指针),记录指针:表中与记录号对应的指针。 当前记录:记录指针指向的记录。 对记录的任何操作,只对当前记录有效。 用GO、GOTO、SKIP命令可以直接移动记录指针,选择当前操作记录。 (1)GO|GOTO REC
9、ORD TOP/BOTTOM (2)SKIP 例如,,GO BOTTOM SKIP -2 ?RECNO(),3.查找记录(记录指针),(3)顺序查找命令格式:LOCATE FOR WHILE 功能:按表的排列顺序依次搜索满足条件的第一条记录; CONTINUE命令与LOCATE命令配合继续查找剩余满足条件的记录; FOUND()函数测试搜索是否成功。,例子:,连续显示 (循环程序新建程序文件) Open database paper Use 论文成绩表 LOCATE FOR pscore=75.0 DO WHILE !EOF() DISPLAY CONTINUE ENDDO,单条显示(命令窗口
10、执行) Open database paper Use 论文成绩表 LOCATE FOR pscore=75.0 ?FOUND() .T. (CONTINUE) DISPLAY,3.查找记录(记录指针),(4)记录过滤从逻辑上过滤掉不满足指定条件的记录。 格式:SET FILTER TO 例如:SET FILTER TO !sex (5)索引查找只能在索引文件中查找关键字表达式的值。 格式:SEEK ORDER/TAG 例如:USE 论文成绩表 ORDER pnoSEEK 2002/05/10 ORDER TAG ptime,取消过滤:set filter to,4.插入和追加记录,VFP提供
11、了追加命令APPEND、插入命令INSERT和批量追加命令APPEND FROM实现记录输入;命令格式:APPEND BLANK IN /(REPLACE 字段1 WITH ,字段2)INSERT BEFORE BLANK例如:USE 学生基本信息APPENDBLANK / INSERTBLANK replace sno with “109101114”,; sname with “jack”,sex with .f.,sold with 25,续行符,5.修改记录,命令格式: REPLACE WITH ADDITIVE, WITH ADDITIVE范围FORWHILE 功能:用表达式的值成批
12、修改多个指定字段的值。例如:SELECT 0USE 学生基本信息REPLACE ALL sold WITH sold+1,给所有学生的年龄加1,Replace sold with sold+1 for sname=“jack”,6.删除和恢复记录,逻辑删除命令DELETE FORWHILE例如:SET DELETED ON/OFF过滤被加删除标记的记录,Open database paper Use 论文成绩表 delete FOR ptime2002-01-01 list,执 行 结 果,执行结果,结果中“*”标识的即为删除标记),6.删除和恢复记录,物理删除记录命令格式:PACK(删除加删
13、除标记的记录) 恢复逻辑删除记录命令格式:RECALL 范围 FOR 逻辑表达式 彻底删除全部记录命令格式:ZAP(彻底删除全部记录)与SET SAFETY ON命令结合使用,询问是否确要永久删除所有记录。,3.3 工作区,工作区是指为每个打开的表在存储器中开辟存储区域; 系统默认用USE命令打开的表使用1号工作区;使用USE命令打开表时,系统自动将1号工作区中原先已打开的表关闭。,例如: USE 论文成绩表USE 学生基本信息 IN 3,可以在多个工作区同时打开多个表,但是只能有一个当前工作区,3.3 工作区,每个工作区只能打开一个表;无论使用多少个工作区,只能有一个当前工作区,VFP启动后
14、默认1号工作区为当前工作区。 在VFP中规定工作区编号是132767,只有前10个有固定名称(AJ),后面的用数字表示。 设置当前区域:SELECT n,最小号工作区,未被占用的最小号工作区如,USE 学生基本信息 IN 0SELECT 0,3.3 工作区,表的别名 选用最小号工作区打开表,很可能一时不知道该表占用的工作区编号或名称。这时,可以使用表的别名切换当前工作区。 表的别名,可以在使用USE命令时指定,如,USE 学生基本信息 ALIAS st;若不指定,系统默认表原名即为表别名。 注意:各工作区已打开的表的别名不能重名。,别名,3.3 工作区,在当前工作区操作其他工作区表字段格式:表
15、的别名.字段名称或者表的别名-字段名重复打开同一个表(在不同工作区)命令格式:USE 表别名 Again,USE 学生基本信息 USE 论文成绩表 ALIAS lw IN 0 SELECT lw ?lw.sno,lw.sname SELECT 学生基本信息 Browse,3.4 维护表结构,显示/修改/复制表结构 可视化方法:表设计器 命令方式 LIST STRUCTURE MODIFY STRUCTURE COPY STRUCTURE TO,3.5 表的索引,1.表内容的排序 2.索引的概念 3.索引的操作,(1)索引的创建 (2)索引的使用 (3)表间关系的创建,(1)索引的概念 (2)索
16、引的类型,1.表内容的排序,表内容的排序,是更改表的物理排序,根据某些字段重新排列表记录的先后顺序;排序后产生一个新表,而原文件保持不变。 格式:SORT TO ON/A/D/C,FIELDS/LIKE|EXCEPT 功能:按字段1、2依次排序,并将排序后记录存到指定文件中。 例如:SORT ON sold/D TO nl FIELDS sno,sname,sold,2.索引的概念,用排序命令排序表实际上采用的是物理排序,这样的排序会占用大量空间,实际使用时效率太低; Visual FoxPro使用索引作为排序机制,提高开发应用程序的灵活性。使用索引可以加速对表中记录的查看和访问。 索引就是表
17、记录排序的一种方法,Visual FoxPro表建立的索引是在磁盘上存储的索引文件(.CDX)。索引文件是表文件的辅助文件,与表文件同时使用。 索引文件是按关键字对原表进行的逻辑排序,因此大大提高的排序速度,减少了占用空间。,2.索引的概念,索引种类Visual FoxPro支持的索引种类分别是:主索引、候选索引和普通索引。 主索引(Primary Index) 数据库中每个表必须要建立一个主索引,代表该表的关键字。 主索引是能唯一确定表中的一条记录的字段,或字段组合表达式。 一个表只能建立一个主索引。主索引中不允许有NULL值。 在表关联性设置中,在主表中必须建立主索引。,如学生基本信息:s
18、no,2.索引的概念,候选索引(Candidate Index) 候选索引又可以称为唯一值索引,可以用来替代表中的主索引键。 但一个数据库表中可以建立多个候选索引,候选索引字段的内容允许使用NULL值。 在表关联性设置中,候选索引与主索引一样,在主表中也可以建立候选索引与从表之间的关联。,如论文成绩表:pno,ptitle,2.索引的概念,普通索引(Regular Index) 普通索引是系统默认的索引类型,不要求数据具有唯一性。 一个表可以创建多个普通索引,这是最基本的索引方式。 例如:论文成绩表中的学号和导师号虽然都不唯一,但都可以作为普通索引,来对论文成绩表进行排序。,如论文成绩表:sn
19、o,profno,2.索引的概念,索引文件类型 在VFP中,索引文件有独立索引文件(.IDX)和复合索引文件(.CDX),其中复合索引文件又分为结构复合索引文件和独立复合索引文件两种。 结构复合索引文件既可以在建表时指定和建立,又可使用命令方式建立;而另两种必须使用相应的命令建立索引文件。 只有在结构复合索引文件中,才能创建主索引。,3.索引的操作,(1)索引的创建方法表设计器(可视化方法:先选择索引字段的排序方式(普通索引),后选择索引类型),3.索引的操作,命令方式 格式:INDEX ON TO /TAG ASCENDING|DESCENDING UNIQUE CANDIDATE例如:US
20、E 学生基本信息INDEX ON sno TAG p_sno ASCE CANDIDATE,唯一索引,候选索引,无主索引,索引文件类型,3.索引的操作,(2)索引的使用 可视化方法:先browse表,然后菜单”Table|Properties”,选择Index order 命令格式:SET ORDER TO 例如:USE 学生基本信息SET ORDER TO p_snoLIST/browse,USE 学生基本信息 ORDER TAG P_SNO,3.索引的操作,(3)取消索引SET ORDER TO (4)删除索引DELETE TAG 索引名 ALL,3.6 数据共享,数据导出 可视化:菜单“文件|导出” 命令方式:EXPORT TO FILENAME 数据导入 可视化:菜单“文件|导入” 命令方式:IMPORT FROM FILENAME ,