1、数据库与表的创建和使用,第3章,3.1 数据库概述,3.1.1 数据库设计的过程,P67,3.1.2数据库的组成,库表数据库表与数据库之间的相关性是通过表文件.DBF与库文件.DBC之间的双向连接实现的. 前链: .DBC中保存表文件的路径和文件名信息 后链: .DBF中保存库文件的路径和文件名信息,视图(View)把分散在相关表中的数据通过连接条件将他们收集到一起,构成一张虚表 连接:指定了远程数据源的名称 存储过程 保存用户自定义函数和过程;保存参照完整性代码,3.1.3 数据字典,数据字典是存储在数据库文件中用于描述所管理的表和对象的数据。即关于数据的数据称为元数据。每个数据库带有一个数
2、据字典。其数据存储在数据库文件中,数据字典可以创建和指定以下内容:,主索引关键字; 数据库表之间的永久性关系; 长表名和表注释; 字段级和记录级有效性规则; 表中字段的标题和注释,默认值,输入掩码和显示格式,表单中使用的默认控件类; 存储过程; 插入、更新和删除事件的触发器。,3.2数据库的创建、打开与使用,三个文件:.DBC/.DCT/.DCX 3.2.1 创建方法 界面方式: 项目中 命令方式 CREATE DATABASE 数据库名|?,3.2.2 数据库的打开与关闭,数据库必须打开后才能访问它内部的表 打开数据库新建的数据库保存后自动打开;打开表时,自动打开相应的数据库;打开项目管理器
3、中修改一个数据库也会打开OPEN DATABASE 库名可以打开多个:OPEN DATABASE JXSJOPEN DATABASE JXSJ2 设置当前数据库 (最后一个打开的为当前数据库)1. 在常用工具栏中设置2. 使用命令SET DATABASE TO 库文件名,关闭数据库在关闭数据库时,属于该数据库的表同时关闭 1、在项目管理器中关闭 2、用CLOSE DATABASE命令关闭 (1)CLOSE DATABASE 关闭当前数据库 (2)CLOSE DATABASE ALL 关闭:所有打开的数据库 删除数据库删除存储在数据库中的一切信息从项目管理器中移去将库表自动变为自由表,3.3 表
4、的创建与使用 两种:数据库表与自由表,表(Table):是指存放在磁盘文件中的一张二维表。一张表保存为一个表文件(.DBF)。 字段(Field):表中的列。字段规定了数据的特征。 记录(Record):表的行。记录是多个字段的集合。同一个表的每一个记录都有相同的字段。,字段(fields),记录 (records),3.3.1 表结构,表结构:主要是指定表的字段及其属性。 字段名(Field Name) 用以标识一个字段的名字。 字段的数据类型(Type) 不同的数据类型的表示和运算的方法不一样。 VFP提供了11种字段的数据类型。 P.76(表3-1)。 字段宽度(Width) 指该字段所
5、能容纳数据的最大字节数。 对字符型,数值型,浮点型用户定义,其他系统定义,小数位数(Decimal) 对于数值型、浮点型和双精度型的字段可以指定其小数的位数。 字段宽度=整数部分宽度+小数点1位+小数位数,3.3.2 表结构的创建和修改,创建表结构的方式有两种: 表设计器(Table Designer)方式 SQL命令方式,一、用“表设计器”创建表结构,在项目中新建表xs.dbf(p295),二、用CREATE TABLE-SQL命 令创建表结构p101,格式是: CREATE TABLE 表文件名(字段名1 字段类型(字段宽度,小数位数),字段名2 字段类型(字段宽度,小数位数)) 例如:p
6、102 CREATE TABLE XS2(xh C(6),xm C(6),csrq D),字段名,字段类型,字段宽度,创建教师表的命令如下: CREATE TABLE js(gh C(5),xm C(8),xb C(2),xdh C(2), zcdh ; C(2), csrq D,jbgz N(7,2) ,jl M ),2、用“表设计器”修改表结构,在项目中修改表结构,二、用 ALTER TABLE 命令修 改表结构p102,添加字段:ADD COLUMN子句。 例如,把“BJMC”(班级名称)字段添加到XS表中: ALTER TABLE XS ADD COLUMN BJMC C(12) 修改
7、字段:ALTERCOLUMN子句。 ALTER TABLE XS ALTER COLUMN BJMC C(10) 重命名字段:RENAME COLUMN 子句。 例如,重新命名XS表的“BJMC”字段为“BJ”: ALTER TABLE XS RENAME COLUMN BJMC TO BJ 删除字段:DROPCOLUMN子句。 例如,从XS表中删掉“BJ”字段: ALTER TABLE XS DROP COLUMN BJ,库表,库表的添加:自由表-库表1、 项目管理器中2、ADD TABLE 表名 向当前数据库添加表注意:一张表只能属于一个数据库 库表的移去:库表-自由表1、 项目管理器中2
8、、REMOVE TABLE 表名 DELETE 从当前数据库移去表DELETE删除,3.3.3 库表字段属性与表属性,在库表的表设计器中 标题和注释 字段的显示属性 p79表3-2 输入掩码p79表3-3 默认值,设置字段级规则,何时检查字段级规则 离开字段时。,规则的作用: 用来控制用户输入到字段中数据的取值范围该规则是一个逻辑表达式,且字段应包含在该表达式中。 LEN(ALLTRIM(XH)=6 用“有效性说明”作为出错信息,是一个字符表达式。,例:给jxsj数据库中的cj表的cj字段进行如下设置: 1、 cj字段在输入时只允许是三位的数字 2、设置标题为“成绩” 3、输入的成绩值必须在0
9、-100分之间 4、设置默认值为60分 5、设置注释为:“学生各门课程的成绩” 设置如下:,2. 库表的表属性,表设计器的表选项卡 长表名,注释 记录的有效性规则,可以校验多个字段之间是否满足某种条件,离开记录时检查JS表 GZRQCSRQ,表的触发器:绑定在表上的逻辑表达式 注:触发器必须返回.T.或.F.,在进行插入、更新、删除时首先检查表的有效性规则、主关键字等信息,然后再检查触发器的返回值,如果对记录执行的操作使逻辑表达式的值为.T.,则允许该操作;否则拒绝该操作。插入触发器:.F. 更新触发器:RECNO()4 删除触发器XDH=“05”,IIF(xf3,bxk=.T.,bxk=.f
10、.),3.3.4 表的打开与关闭,表只有在被打开时,表中的数据才能被访问。 打开的表可以被关闭。,1 工作区,一、工作区的概念 工作区是指用以标识一个打开的表的区域。 每个工作区有一个编号(工作区号132767前10个可用AJ表示)。 一个工作区在某一时刻只能打开一个表。 可在多个工作区打开多张表 也可以将一张表在多个工作区打开,内存,1,2,3,表的别名是对工作区中打开的表的一个临时标识。 定义表的别名 (1)在打开表时指定别名 USE 表文件名 ALIAS 别名 (2)在打开表时,如果没有自定义别名,则系统默认以表文件名作为别名。,内存,1 xs,2 teacher,3,1、当前工作区 V
11、FP正在使用的工作区称为当前工作区,即默认的工作区。 设置当前工作区 使用SELECT命令设置SELECT 工作区号|别名 用函数SELECT 0选择未被使用的最小编号的工作区,内存,1 xs,2 teacher,3,2数据工作期窗口,窗口-数据工作期,3. 打开表,对于创建的表,自动处于打开状态 1.通过界面操作 使用“文件”菜单或工具条,表在当前工作区打开; 在“数据工作期”窗口中打开,表在未被使用的最小工作区打开,且当前工作区不变; 用项目管理器窗口单击修改或浏览,表在未被使用的最小工作区打开,且该工作区为当前工作区 2.使用命令 USE 表文件名 IN 工作区号|别名 3.多次打开一个
12、表 USE 表文件名 IN 工作区号|别名 AGAIN,USE xs &在当前工作区打开xs表,xs USE js Alias jiaoshi IN 4 &在工作区4中打开js表 USE zg IN 0 &在最小未用工作区中打开zg表 USE xs AGAIN IN 5 &在工作区5中再次打开xs表,E USE xs AGAIN IN 15 &在工作区15中再次打开xs表,W15,4. 关闭表,1.通过界面操作 在“数据工作期”窗口中关闭; 2.使用命令 (1)关闭当前工作区中的表:USE (2)关闭非当前工作区中的表的命令:USE IN 工作区号|别名或者 SELECT 工作区号|别名USE
13、 (3)关闭所有工作区中的表的命令:CLOSE TABLES ALL (4)在退出VFP系统时,所有的表都将被关闭。,3.3.5 表记录的处理,1 记录的输入,追加记录的方式主要有四种: 表结构创建后立即输入记录备注与通用字段双击输入 在浏览状态下向表中追加记录显示追加方式;表-追加新记录 三. 使用INSERT SQL命令追加记录 四. 从其他表中追加记录,用 INSERT SQL命令追加记录,INSERTSQL命令的一般格式是: INSERT INTO 表名 (字段1 ,字段2,);VALUES(表达式1,表达式2,) 例如,向XS表中插入一个新记录: INSERT INTO XS(XH,
14、XM,XB,XIMING);VALUE(” 960100”,”曹晓燕”,”女”,”文”) 例:向教师表中插入一条新记录 INSERT INTO JS(Gh,xm,xb,csrq,jbgz)VALUES;(“A0008”, “李力”, “男”,1960/03/12,1800 ),从其他表中追加记录,APPEND BLANK追加一条空记录 使用该命令必须先用USE命令打开表 从另一个DBF文件中追加记录到当前表中 APPEND FROM 另一个表文件名 需有与当前表的字段相同的字段,2 记录的浏览 浏览窗口 BROWSE命令 P88 例:浏览教师表中信息管理系男教师的情况工号、基本工资情况USE
15、JSBROWSE FIELDS GH ,JBGZ FOR XB=“男” AND XIMING=“信息管理系” NOMODIFY TITLE 信息管理系的男生,5 记录的定位,记录号,一、记录指针的概念,文件头,(包含表结构等信息),第1号记录,第2号记录,第n号记录,记录指针,记录开始标志,记录结束标志,几个概念,三个控制标志:记录的开始标志、记录指针标志、记录的结束标志 当前记录 几个函数:BOF();EOF();RECNO() P90表3-6,二、记录的定位方式 使记录指针指向用户要操作的那个记录,1、指针的绝对定位:把指针移动到指定的位置。 2、指针的相对定位:指从当前位置开始,相对于当
16、前记录向前或向后移动若干个记录位置。 3、条件定位:指让计算机按照一定的条件自动地在表的某个指定范围中查找符合该条件的记录,如果找到符合条件的记录,则把指针移动到该记录上,否则,指针将移动到整个表或表的指定范围的末尾。,三、记录定位的实现,1、在浏览状态下 2、使用命令 绝对定位命令:GOTO 记录号/TOP/BOTTOM GOTO 3 IN 2 &定位到2号工作区的第三条记录GOTO TOP &定位到第1条记录GOTO BOTTOM &定位到最后一条记录相对定位命令:SKIP n SKIP 2 IN 2 &2号工作区中的记录指针向后移动2个SKIP -1 &向前移动一个,条件定位命令:LOC
17、ATE FOR 条件范围 在“作用范围” 的四个选项: “All”:表中的全部记录; “Next”:从当前记录开始的n个记录,个数在其右边的文本框中输入; “Record”:指定的记录,记录号在其右边的文本框中输入; “Rest”:当前记录后的所有记录。 USE XS?RECNO( ) LOCATE FOR XB=“男”?RECNO( )CONTINUE &记录指针下移到下一个符合条件的记录?RECNO( )P91,6. 记录的修改,一、在浏览窗口中编辑修改记录 二、批量记录的修改 使用“表”菜单中的“替换字段”项 例:要将工资表中所有工龄满30年的教师的基本工资加100的命令为 UPDATE
18、-SQL命令 语法: UPDATE 表名 SET 字段1=表达式1 ,字段2 = 表达式2 . WHERE 条件表达式UPDATE gzb SET jbgz=jbgz+100 WHERE year(date()-year(gzrq)=30,修改记录字段值的的命令有两个:,REPLACE命令 REPLACE 字段1 WITH 表达式1 ,字段2 WITH 表达式2 . FOR 条件表达式 说明: FOR和SCOPE缺省时均表示对当前记录进行替换; Additive对备注型字段有效,有时,追加/无时,替换 用该命令更新表时,表必须事先打开; 执行完该命令后,记录指针位于指定范围的结尾。 Use g
19、zbReplace jbgz with jbgz+100 for;year(date()-year(gzrq)=30,7 记录的删除与恢复,删除表中的记录要分两个步骤来实现: (1)标记要删除的记录; (2)彻底删除带删除标记的记录。,一、标记要删除的记录,1、界面方式的删除 (1)在表的浏览窗口中删除个别记录 (2)在表的某一范围内删除一组符合指定条件的记录 表删除记录 如学生表中籍贯不属于江苏的记录作逻辑删除,2、命令方式的删除 (1)DELETE命令 DELETE 范围 FOR 条件表达式 范围: ALL(所有记录) REST(从当前记录开始到记录结束) RECORD n(第n号记录)
20、NEXT n(从当前记录开始的n条记录) 默认范围:当前记录 FOR 条件表达式:删除符合条件的记录 如:对教师表中年龄超过60岁的教师加注删除标记。 Use JS DELETE FOR (DATE( )-CSRQ)/36560,2、命令方式的删除 (2)DELETE-SQL命令 DELETE FROM 表名 WHERE 过滤条件表达式 如:对教师表中工龄大于30的教师设置删除标记 DELETE FROM JS WHERE (DATE( )-CSRQ)/36560,二、对带删除标记记录的处理,1、恢复删除浏览窗口单击;RECALL 范围FOR 条件 P94 2、彻底删除表彻底删除PACK P9
21、4ZAP 删除所有记录,8 数据的复制,COPY TO 文件名 FIELDS 字段名 范围 FOR 条件 P95,用UPDATE-SQL语句修改ts图书表中作者字段(zz,C)的值时,若要在所有记录的作者后面加汉字“等”,可以使用命令: (1)Update ts SET zz= +“等” (2)use tsreplace all zz with ,values,ALLTRIM(zz),xls,set,3.3.6 表的索引,3.3.6 记录的顺序,1.索引概述 一、物理顺序按记录输入的时间顺序存放。 二、逻辑顺序对记录按某个字段值或某些字段值排序。 排序方法:1。重建新表2。索引法,仅存记录号的
22、对照表,2. 索引文件的种类,1. 索引文件 保存索引信息的文件。 2. 索引文件的种类 (1)结构复合索引文件(.cdx) 结构复合索引文件与对应的表文件的主文件名相同。 与表同步打开、更新和关闭。 (2)非结构复合索引文件(.cdx) 非结构复合索引文件名由用户给出。 不随表的打开而自动打开。 (3)独立索引文件(.idx) 独立索引文件是只存储一个索引的索引文件。 独立索引也不会随表的打开而自动打开。,3 结构复合索引文件的创建,一、索引(Index) 1、根据索引关键字的值进行排序的一组指针,由被索引字段表达式的值和对应的表的记录号组成。 2、索引表达式 建立索引的依据;一个或多个字段
23、组成;不能基于备注型和通用型建立;如索引表达式为字符型则各个字段的顺序影响结果;如索引表达式为算术表达式,按运算结果排序;不同类型构成表达式时,必须转换为同一类型 3、索引标识(TAG):每个索引的名称,2. 索引的类型 主索引(Primary Indexes) 组成主索引关键字的字段或表达式,在表的所有记录中不能有重复的值的索引。 每张表只能创建一个主索引。 自由表不能建立主索引。候选索引(Candidate Indexes) 在指定的关键字段或表达式中不允许有重复值的索引。 一张表中可以建立多个候选索引。 候选索引可用于数据库表和自由表。,普通索引(Regular Indexes)允许关键
24、字段或表达式的现重复 唯一索引(Unique Indexes) 索引的关键字段或表达式在表中可以有重复值,但在索引对照表中,重复的值仅存储一次,而忽略其他的相同的值。,一、用“表设计器”创建如:XH ; XB和CSRQ 二、 用INDEX命令创建 INDEX ON 索引表达式 TAG 索引标识名 FOR 条件表达式 ASCENDING | DESCENDING UNIQUE | CANDIDATE Index on xdh+xm tag xdhxm,索引的修改 用“表设计器” 用INDEX命令,不修改索引标识 索引的删除 (1)用“表设计器” (2)用DELETE TAG命令DELETE TA
25、G 标识名1, 标识名2 或者: DELETE TAG ALL,4. 索引的使用,一、主控索引的概念一张表可以有多个索引,但要决定显示或访问表中记录的顺序,还要将一个索引设为主控索引,即某一时刻只有该索引对表显示和访问起进行控制,打开表的同时指定主控索引 (1)指定复合索引文件的主控标识 USE 表文件名 ORDER TAG 标识名 Use xs order xh Use xs in 0 alias xs2 again order xb,(2)、打开表后指定主控索引 用SET ORDER TO命令设置 SET ORDER TO Tag名 IN 工作区 | 别名 ASCENDING | DESC
26、ENDING Set order to xb 取消主控索引 SET ORDER TO,(3)利用索引快速定位记录,1、SEEK命令在表中搜索指定表达式的值首次出现的记录,索引关键字与表达式匹配 SEEK 表达式ORDER 索引编号| ORDER Tag名 ASCENDING|DESCENDINGIN 工作区|别名 Set order to xh Seek ”01” Found( )测试找到没,3.3.7 自由表,3.4 永久关系与参照完整性,3.4.1 永久关系,永久关系(persistent relationship) 永久关系是永久保存在数据库表之间的一种关系。 根据表的索引建立.一对多关
27、系中,一方用主索引或侯选索引,多方用普通索引,3. 永久关系的建立 确定两个具有一对多或一对一关系的表; 建立主表的主索引或候选索引; 如果是一对多关系,则在子表中以主表的主关键字作为它的外部关键字建立普通索引;如果是一对一关系,则在子表中以与主表相同的关键字建立主索引或候选索引。 在数据库设计器窗口中,从主表的主索引或候选索引到子表相关的索引建立永久关系。 4.删除表间的永久关系 单击,DEL键,3.4.2 参照完整性概念,参照完整性(RI)是用来控制数据库相关表之间的主关键字和外部关键字之间数据一致性的规则。,2 设置相关表的参照完整性,相关表之间的参照完整性规则是建立在永久关系基础上的。
28、 规则的代码保存在数据库的存储过程中。 使用“参照完整性”生成器来建立。 规则的实施由主表和子表的触发器完成.,设置相关表的参照完整性,3.4.3 VFP数据完整性综述,VFP引进了关系数据库的三类完整性: 实体完整性;参照完整性;用户自定义完整性 实体完整性包括两级: 字段的数据完整性(由字段的有效性规则加以实施) 记录的数据完整性(由记录的有效性规则加以实施) 参照完整性是指相关表之间的数据一致性。 通过字段级、记录级和表间三级完整性约束,有效地实现了数据的完整性和一致性。方便和简化了用户的数据维护。,3.5 常用函数,1.dbc() :当前打开的数据库的完整文件名,无参数dbused(数
29、据库名):指定的数据库是否打开,2. DBGETPROP()函数,作用:返回当前数据库或者当前数据库中字段、表或视图的属性。 语法:DBGETPROP(cName, cType, cProperty) 参数: cName指定数据库、字段、表或视图的名称。,cType指定cName的类型,是否为当前数据库,或者当前数据库中的一个字段、表或视图。下表列出了 cType 的允许值:,CProperty指定属性名称,DBGETPROP( ) 函数返回该属性的信息。(参见教材P107表3-9),先打开jsxj数据库,然后 ?DBGETPROP(“jxsj”,”DATABASE”,”Comment”) ?DEGETPROP(“js”,”TABLE”,”Comment”),3 DBSETPROP()函数,作用:设置当前数据库或者当前数据库中字段、表或视图的属性。 语法:DBSETPROP(cName, cType,cProperty,eValue) 参数: eValue指定cProperty的设定值,eValue 的数据类型必须和属性的数据类型相同。 2.要设置js表的xb字段的标题。 。DBSETPROP(“js.xb”,”FIELD”,”Caption”,”性别”),Set Order TO xsxh DESC,TABLE,