1、第三章,表的使用,主要内容,表结构的创建和使用表记录的编辑修改表的使用表的索引建立表之间的临时关系,第一节 表结构的创建和使用,1、表的相关概念 2、创建表结构 3、表结构的修改,3.1.1 表的相关概念,数据表即一张二维表,简称表(Table) 表中的一列为字段(Field) 表中的一行为记录(Record) 表分为数据库表和自由表两种;数据库表比自由表功能强 表文件的扩展名为.dbf .fpt .cdx,字段的基本属性 1、字段名( Field Name) 见名知义,不能同名 2、数据类型(Type)11种C字符型 N数值形 D日期型 L逻辑型 M备注型 G通用型Y货币型 I整型 F浮点型
2、B双精度型 T日期时间型 3、宽度(Width)(以下类型宽度固定) 货币型、日期型、日期时间型、双精度型:8字节 整型、备注型、备注型(二进制)、通用型:4字节 逻辑型:1字节,4、小数位数(Decimal)有小数的字段:数值型、浮点型、双精度型字段宽度 = 整数部分宽度 + 小数点1位 +小数位宽度整数部分宽度可以为 0 5、空值支持 ( Null ) 空值是用来标识一个字段“没有值”的标志 空值表示没有任何值或没有确定值 空值不等同于数值0、空字符串或逻辑“假” 用函数ISNULL() 测试空值,表中用Ctrl+0输入空值,3.1.2 创建表结构,使用表设计器来创建表结构(1)打开“表设
3、计器”文件/新建/表/新建文件/输表名/保存项目管理器/自由表/新建/新建表/输表名/保存,表包含在项目管理器中,使用SQL命令创建表结构CREATE TABLE - SQL命令,(2) 在“表设计器”中创建表结构,格式:CREATE TABLE | DBF 表文件名 ;(字段名1 类型(宽度,小数位数);,字段名2 类型(宽度,小数位数),例:创建学生表STU2CREATE TABLE STU2 ;(SNO C(6),SNAME C(8),PHOTO G),3.1.3 表结构的修改,1、使用表设计器修改表结构 方法1:文件菜单打开文件(独占方式)显示菜单启动表设计器 方法2:项目管理器选定表
4、修改 方法3: USE XS MODIFY STRUCTURE 方法4:浏览“表” “属性” “修改” 方法5:“窗口” “数据工作期” “属性” “修改” 2、使用SQL命令修改表结构ALTER TABLE - SQL命令 格式:ALTER TABLE 表名 字段处理子句,添加字段:ADD COLUMN 子句 例:教师表添加WAGE 字段ALTER TABLE JS ADD COLUMN WAGE N(10) 重命名字段:RENAME COLUMN 子句 例:教师表WAGE字段重命名为GZALTER TABLE JS RENAME WAGE TO GZ 删除字段:DROP COLUMN 子句
5、 例:删除教师表GZ字段ALTER TABLE JS DROP COLUMN GZ 修改字段类型、宽度: ALTER COLUMN 子句 例:修改教师表GH字段的宽度为C型8字节宽度ALTER TABLE JS ALTER GH C(8),第二节 表记录的编辑修改,1、追加记录 2、表的浏览 3、定位记录 4、修改记录 5、删除记录 6、筛选记录与字段,3.2.1 追加记录,1、浏览窗口: 方法一:立即输入记录 方法二:显示追加方式 方法三:表追加新记录 2、命令: a、INSERT - SQL命令 INSERT INTO 表名 (字段1,字段2); VALUES(表达式1,表达式2) 位置一
6、致!,INSERT INTO JS ;(GH, XM, XB ); VALUE (“A0008”,”王勇”,”男”) ),3、从其它数据表中追加纪录菜单:表追加记录命令:APPEND FROM 数据文件 文件类型文件类型:xls xl5 sdf delimited 等,b、APPEND BLANK APPEND 弹出编辑窗口,在当前已打开表的末尾追加一条或多条记录,。APPEND BLANK 不弹出编辑窗口,在表末尾追加一条空白记录。,二、记录的浏览 1、菜单方式打开表文件显示浏览项目管理器选定某个表浏览 2、命令方式BROWSE 字段名子句 条件子句 LIST / DISPLAY 范围 表达
7、式列表子句 条件子句 TO PRINT OFF,browse Browse fields gh,xm,xb Browse fields gh,xm,xb for xb=“男”,关于条件子句中的表达式,算术:+,-,*,/ 关系:=,=, 逻辑: not and or 例如: 年龄40 男 研究生nl40 and xb=男 and xl=研究生,All,record n ,next ,rest(解释),范围,ALL 当前数据表中的所有记录 REST 当前记录开始直到表尾的所有记录 NEXT n 表示从当前记录起的连续n条记录 RECORD n 表示指定记录号为n的一条记录,条件子句有: FOR
8、条件表达式表示对所有满足条件的记录处理 WHILE 条件表达式表示当满足条件时处理记录,若条件不满足时立即停止处理记录,如何定制浏览窗口?,重新安排列的位置:拖动 改变列的宽度:拖动 显示或隐藏表格线:显示/网格线 把浏览窗口分为两个窗格:左下角拖动 查看同一表中的两个不同区域:各自移动 同时在浏览和编辑方式下查看同一记录 两个窗格间的链接:表/链接分区,3.2.3 记录的定位,表文件示意图及记录指针标志记录的定位方式记录定为实现,1、 表文件示意图及记录指针的标志,开始标志 函数BOF ( ) 当前记录 函数RECNO ( ) 结束标志 函数EOF ( ),记录指针,记录开始标志,记录结束标
9、志,当前记录,2、记录的定位方式,1、绝对定位 go 2、相对定位 skip 3、条件定位,go top go bottom go 10,skip 1 skip -1,Locate for 条件 Continue,例1 假设xs表有13条记录,先后执行以下命令,bof() eof() recno() use xs f f 1 (打开) skip -1 t f 1 skip -1 出错 go bott f f 13 skip f t 14 skip 出错,例2,Use xs go 5 skip +2 skip -3 locate for ,1 5 7 4,3、记录定位的实现 界面方式 (“表”“
10、转到记录”) 记录号:绝对定位 Go n 定位:条件定位 Locate for 条件 作用范围:all,next,record,rest,for 命令方式绝对定位:Go nGo TOP | BOTTOM相对定位:Skip n条件定位:Locate For 条件Continue,3.2.4 记录的修改,1、在浏览窗口中修改 EDIT | CHANGE | BROWSE 项目管理器/浏览 例:修改xs表中第5条记录use xsedit record 5,2、批量记录的修改(1) 界面方式“表”“替换字段”字段条件(2) 命令方式:UPDATE-SQL命令(表不必打开)UPDATE 表名;SET 字
11、段1=表达式1,字段2=表达式2;WHERE 条件表达式,例:把teacher表中所有工资不满2000的教师的工龄加100UPDATE teacher SET wage=wage+100 WHERE wage2000,例:把teacher表中所有工资不满2000的教师的工龄加100USE JSREPLACE wage WITH wage+100 FOR wage2000,REPLACE 命令 REPLACE 范围 字段1 WITH 表达式1 ;, 字段2 WITH 表达式2 FOR 条件表达式,3.2.5 记录的删除,目的:节省时空 (删除无用记录) 删除与恢复操作:1、标记要删除的记录(逻辑
12、删除) 方法1:浏览窗口:左边小方框 白色黑色 方法2:“表”“删除记录” 方法3: DELETE 范围 FOR 条件表达式 方法4: DELETE - SQL命令:DELETE FROM 表名WHERE 过滤条件表达式,2、彻底删除(物理删除) 界面操作:“表”“彻底删除” 命令:PACK(独占) 命令:ZAP=delete all +pack(独占),例:删除教师表中年龄在60岁以上的记 delete from js where year(date()-year(js.csrq),3、恢复带删除标记的记录方法1:小方框 黑白方法2:“表”“恢复记录”方法3:RECALL 范围FOR 条件表
13、达式 例: recallrecall allrecall all for xb=男(这里的all 可省) 说明:缺省范围(当前记录,全部记录),4、对带删除标记记录的访问 (1)测试记录的删除标记Delete() (2)控制对带删除标记记录的访问Set Deleted On | Off,实验: 先删除若干记录(逻辑删除) LIST (默认为OFF) SET DELETED ON LIST,3.2.6 筛选记录,界面“表”“属性”“数据过滤器” 例:找出所有gl小于10年的教师 命令SET FILTER TO SET FILTER TO 例:USE XS SET FILTER TO XB=“女”
14、,注意: 是隐藏记录而非删除记录 与FOR子句不同 对 SELECT-SQL、 DELETE-SQL、UPDATE-SQL命令无效,3.2.7 筛选字段,界面操作:表属性字段筛选命令操作:SET FIELDS TO 字段名列表SET FIELD ON | OFF,第三节 表的使用,1、工作区2、打开表和关闭表3、独占和共享4、数据缓存,1、概念 工作区:用以标识一张打开的表的区域 一个工作区在某一时刻只能打开一张表 工作区中打开的表都有一个别名 USE XS(默认为1号) LIST USE JS(XS自动关闭) LIST,3.3.1 工作区,可以同时在多个工作区中打开多张表 选择当前工作区命令
15、:SELECT 区号 | 别名 一张表可以在多个工作区同时被打开 SELE 1 sele 1 USE XS use xs LIST sele 2 SELE 2 use xs again USE JS list LIST sele 1 SELE 1 list LIST,2、表的别名 USE ALIAS 例:use xs allas student注:若没有定义别名,则默认表文件名为别名;再次打开同一表时若不定义,则默认在110号工作区以字母AJ为别名,大于10号的工作区以W数字为别名,例如120号工作区以 W120 为别名。,3、选择当前工作区:正在使用的工作区 界面操作:窗口数据工作期选择别名
16、 (2) 命令操作:SELE 工作区号|别名 常用函数: SELECT(别名):测试当前工作区的区号 ALIAS(区号):测试指定工作区中表的别名 注意:select(0) select(1) select 0 含义,操作非当前工作区中的表 把其它的工作区选为当前工作区 SELE 2 在命令中强行指定工作区 GO TOP IN JS 选用一个未被使用的编号最小的工作区为当前工作区 SELE 0 &选择编号最小工作区 ?SELE() &测试当前工作区,1、表的打开 界面 文件打开 窗口数据工作期打开 USE ? 命令 USE IN 区号 AGAIN ;ALIAS 别名,3.3.2 打开和关闭表,
17、2、表的关闭 界面 窗口/数据工作期/关闭 命令 USE USE IN CLOSE ALL &数据库、索引、项目管理器等也被关闭 CLOSE DATABASES &如果当前没有打开的数据库,则把自由表全部关闭 CLOSE TABLES &关闭表,不关闭库 退出VFP 注意:SQL语句能自动打开表,但不会自动关闭表!,表的共享使用:一张表可以同时被多个用户打开(shared) 表的独占使用:一张表只能被一个用户打开(默认)(exclusive) 设置独占与共享打开表的默认状态 工具/选项/数据 SET EXCLUSIVE OFF/ON(共享/独占) 强行用一种方式打开表 “打开”“独占”复选框
18、USE SHARED/EXCLUSIVE 注: 设置改变,并不改变已经打开的表的状态(演示)一张表同时被多次打开时,只以第一次的打开方式为准,3.3.3 表的独占与共享使用,1、数据缓冲在多用户环境下,用以保护对表记录所做的数据更新以及数据维护操作的一种技术 2、缓冲类型 (1)记录缓冲:一次访问、修改一个记录 (2)表缓冲:对多个记录缓冲更新两种锁定方式: (1)保守式:编辑记录时就锁定记录 (2)开放式:记录只在被写入时加锁,3.3.4 利用缓冲访问表中的数据,3、设置表的数据缓冲 (1)界面操作:窗口数据工作期属性 (2)命令操作:CursorSetProp(Buffering, 缓冲类
19、型, 别名)例:为XS表打开开放式表缓冲:SET MULTILOCKS ONUSE XS= CURSORSETPROP( Buffering, 5),4、检测缓冲区中的数据是否与数据源表一致 (1) CURVAL() 返回当前值 (2) OLDVAL() 返回初始值 5、执行和放弃对缓冲数据的更改 (1)TABLEUPDATE()执行对缓冲区的修改 (2)TABLEREVERT()放弃对缓冲区的修改,第四节 表的索引,1、索引的相关概念 2、索引的索引的类型和文件类型 3、创建结构复合索引文件 5、索引的修改和删除 6、索引的使用,1、记录的物理顺序与逻辑顺序 物理顺序:记录在磁盘中的存储顺序
20、,在检索数据时,按记录顺序进行查找,检索速度慢。 逻辑顺序:根据某个字段(或字段表达式)的取值按升序(或降序),建立索引文件,再按索引文件的顺序排列记录,称为逻辑顺序。检索数据时,可以用二分法查找关键字值,检索速度快。,索引:不改变物理顺序,所有关键字按升(降)排列,每个值对应原文件的一个记录号,确定记录的逻辑顺序,3.4.1 索引的相关概念,2. 索引文件结构 索引文件结构:关键字值(有序排列)+记录号 注意: 关键字值为单个字段或多个字段的组合。 多个字段,一般统一转换为一个字符型表达式 表达式的计算结果将影响索引的结果 例如:XIMING+XB 与 XB+XIMING 多个数值型字段,一
21、般根据实际意义作相应处理例如:GZ+GL 与 STR(GZ)+STR(GL) 索引标识名(Tag) 索引名(一般和字段名相同) =10字节,3.4.2 索引文件种类,1、结构复合索引(CDX),2、非结构复合索引(CDX),3、独立索引(IDX):与FoxBase兼容,文件名与数据表同名,文件名是在表文件创建时由系统自动给定 结构复合索引文件与表文件同步打开、更新、关闭,是表的一部分,文件名由用户给出 非结构复合索引文件中不能创建主索引,3.4.3 索引的类型,1、主索引(Primary indexs) 2、侯选索引(Candidate indexs) 3、普通索引(Regular index
22、s) 4、唯一索引(Unique indexs),组成主索引的字段或表达式,表的所有记录中不能有重复的值 主索引仅用于数据库表的结构复合索引文件中,自由表不能建立主索引;每张表只能创建一个主索引,字段或表达式中不允许有重复值 一张表中可以建立多个侯选索引 侯选索引可用于数据库表和自由表,允许字段或表达式的值出现重复 侯选索引可用于数据库表和自由表,允许字段或表达式的值出现重复; 索引对照表中,具有重复值的记录仅存储其中的第一个。,3.4.4 索引文件的创建,1、表设计器 “表设计器”“索引”选项卡 2、Index命令 INDEX ON TAG OF 非结构复合索引文件名 | TO 独立索引文件
23、名 FOR ASCENDING | DESCENDING;UNIQUE | CANDIDATE,升 | 降序 默认升序,唯一或侯选索引,不能对备注字段和通用字段建立索引 不要建立无用的索引,3.4.5 索引的修改和删除,索引的修改 表设计器 “表设计器”“索引”选项卡 命令 INDEX命令修改原索引 索引的删除 表设计器 “表设计器”“索引”选项卡 DELETE TAG 删除索引标识,3.4.6 索引的使用,1、设置主控索引 主控索引:决定显示或访问表中记录的顺序的,打开表的同时指定主控索引 Use 教师表 order xsxh打开后再设置主控索引 窗口 /数据工作期 /属性/索引顺序 命令
24、SET ORDER TO TAG set order to xsxh,主控索引可以是:复合索引文件中的一个标识(主控标识) /一个独立索引文件(主控索引文件),2、取消主控索引 窗口 数据工作期 属性索引顺序无顺序 SET ORDER TO 3、索引函数 CDX( 1) ORDER( ) TAG( N) N=1,4、利用索引快速定位记录 SEEK 命令SEEK 表达式 ORDER 索引名 IN 别名 SEEK 命令只能在索引过的表中使用,并且只能搜索索引关键字值 EOF( )与FOUND( ) SEEK()函数相当于SEEK命令+FOUND( )例如:seek(0000001),数据表,索引表,关于字段名,字段名由汉字、字母、数字和下划线组成, 字段名必须以汉字、字母、和下划线开头。 在表中必须唯一 自由表,字段名最多为10个字符 数据库表支持长字段名,字段名最多为128个字符。 字段名避免使用系统的保留字。,