123第四讲教案.docx
《123第四讲教案.docx》由会员分享,可在线阅读,更多相关《123第四讲教案.docx(17页珍藏版)》请在冰豆网上搜索。
123第四讲教案
第三章数据库及其操作
在第一章中,我们已经学习了数据库的基本概念,所谓数据库(DataBase)是存储在计算机上结构化的相关数据集合。
随着计算机处理的数据越来越多,数据之间的联系越来越复杂,对最初单独的数据表的管理已经不能满足数据管理的要求。
VisualFoxPro中引入了真正的数据库来对数据进行管理,它不仅可以管理数据,而且可以管理数据之间的联系。
注意:
(1)数据库在磁盘上以文件形式存储,扩展名为.dbc。
一个数据库可以包含一个或多个扩展名为.dbf的表。
所以,在VF中,把.dbf文件称为数据库表,而不再称为数据库或数据库文件。
(2)当我们建立了一个数据库后,除了产生扩展名为.dbc的文件名,系统会自动生成一个数据库备注文件(扩展名为.dct)和一个数据库索引文件(扩展名为.dcx)。
但这3个文件是数据库管理系统管理数据库时使用的,用户不能随意调用修改。
这时建立的数据库只是一个空的数据库,还没有数据,也不能输入数据,接着还需要建立数据库表和其他数据库对象,而后才能输入数据和实施其他数据库操作。
一.数据库
1.1建立数据库:
1)通过项目管理器建立数据库
2)通过新建对话框建立数据库
3)通过命令方式建立数据库
格式:
createdatabase[<数据库名>|?
]
说明:
如果不指定数据库名或者输入?
,系统会弹出“创建”对话框,请用户输入数据库名。
1.2打开数据库:
1)通过项目管理器打开数据库
2)通过“打开”对话框打开数据库
注意:
打开数据库,会打开相应的数据库设计器,而数据库设计器是对数据库进行操作的一个平台,就像用来做实验的实验台一样。
3)通过命令方式打开数据库
格式:
opendatabase[<文件名>|?
][exclusive(独占时)|shared(共享)][noupdate]
说明:
●如果不输入文件名或输入?
,则显示打开对话框,用户可以从中选择一个已经存在的数据库。
当数据库打开时,包含在数据库中的所有表都可以使用,但是这些表不会自动打开,使用时需要使用use命令打开。
●Exclusive:
表示以独占的方式打开数据库,独占就是指一次只可以一个用户访问数据库(一个用户访问数据库,其他的用户就不能同时访问)。
●Shared:
表示以共享方式打开数据库。
一个用户打开数据库后,其他用户也可以同时访问。
默认的打开方式由setexclusivetoON|OFF设置值决定,系统默认是ON
●Noupdate:
表示不能更改数据库,这个数据库是只读的。
默认的打开方式是读/写方式(即可修改)。
此选项并不起实际作用,为了使数据库中的表是只读的,需要在用use命令打开表时使用noupdate。
●VALIDATE:
指定vf检查在数据库中引用的对象是否合法,例如:
检查数据库中的表和索引是否可用,检查表的字段或索引的标记是否存在等。
如:
打开数据库“学生管理”的命令:
Opendatabase学生管理
注:
vf可以在同一时刻打开多个数据库,但在同一时刻只有一个当前数据库,用户的所有作用于数据库的命令都是针对当前数据库而言的。
就像我们可以在Windows中同时打开多个窗口,在同一时刻却只能对其中的一个进行操作。
1.3指定当前数据库
1)命令方式:
Setdatabaseto[文件名]。
说明:
指定一个已经打开的数据库为当前数据库,如果缺省时则所有的数据库都不是当前数据库,但是这些数据库都没有关闭。
2)鼠标操作P97页
1.4修改数据库:
修改数据库的实质是在打开的数据库设计器中完成各种数据对象的建立、修改和删除等操作。
打开数据库设计器的方法:
1)通过项目管理器打开数据库
2)从“打开”对话框打开
3)通过命令方式修改数据库
格式:
modifydatabase[数据库名|?
][nowait][noedit]
说明:
●如果不输入数据库名或输入?
,则打开“打开”对话框,用户可以从中选择一个已经存在的数据库
●Nowait:
只在程序中使用,在命令窗口中无效
●Noedit:
使用这个参数后,只能打开数据库设计器,但是不能对数据库进行修改
1.5关闭数据库:
当我们关闭数据库设计器的时候,并没有把数据库关闭。
要想把数据库关闭就要使用数据库关闭命令
格式:
closedatabase[<数据库名>]
功能:
用于关闭当前打开的或者指定的数据库
1.6删除数据库:
1)通过项目管理器删除数据库
2)通过命令方式删除数据库
格式:
deletedatabase<数据库名>|?
[deletetables][recycle]
说明:
●如果不输入数据库名或输入?
会弹出“删除”对话框,需要用户选择要删除的数据库文件。
●Deletetables:
在删除数据库的同时删除表等对象。
●Recycle:
将删除的数据库文件和表文件等放入windows回收站,如果需要的话可以还原它们。
如果我们把数据库看做一个文件柜的话,那么数据库表就是放在这个文件柜里的文件夹,而数据库表中的记录就相当于文件夹中的文件。
数据库这个“文件柜”只起合理组织和管理“文件夹”的作用,“文件夹”才是我们日常工作操作对象。
数据库表是二维表结构:
表.1学生.DBF
学号
姓名
性别
出生年月
入学成绩
简历
照片
00201
张伊
男
81/12/30
560.50
Memo
Gen
00202
李光华
女
82/05/02
580.00
Memo
Gen
00301
汪海
女
82/03/25
579.00
Memo
Gen
00303
李嘉陵
男
83/01/06
580.00
memo
Gen
00203
魏微微
女
82/03/09
592.50
memo
Gen
二、数据库表
2.1数据库建立:
1)通过项目管理器建立数据库表
2)在数据库设计器中建立数据库表
3)通过命令方式建立数据库表
格式:
CREATE[<表名>|?
]
说明:
如果不输入表名或是使用“?
”,则打开“创建”对话框,让用户输入表名。
注意:
用命令方式创建数据库表,数据库必须处于打开状态,否则创建的表为自由表。
我们简单介绍表设计器中的一些基本内容。
1)字段名:
--关系的属性名,可以通过字段名直接引用表中的数据。
其命名规则为:
字段名可以是字母、数字、汉字和下划线,且字段名必须以字母或汉字开头;
数据库表字段名最长为128字符;
自由表字段名最长为10字符;
字段名不能包含空格。
2)字段名和宽度
字段的数据类型决定了存储在字段中的值的数据类型,同样的数据类型通过宽度限制可以决定存储的数据的数量和精度。
见书上:
78页
3)空值:
(NULL):
空值表示是否允许改字段为空。
空值是没有的值或是没有确定的值。
注:
主关键字不允许为空
4)字段有效性:
字段有效性组框中可以定义字段的有效性规则,违反时规则时的提示信息,和字段的默认值
例:
在student的sex字段中只能输入“男”或“女”,如果输入其他的字符,系统则提示“性别之梦是男或女”信息,新增的表记录,默认性别值为“男”。
规则:
sex$“男女”
信息:
“性别只能为男或女”
默认值:
“男”
5)“显示”组框:
可以定义字段显示的格式、输入的掩码和字段的标题。
“格式”文本框键入格式表达式,确定字段在浏览窗口、表单或报表中显示时采用的大小写和样式。
“输入掩码”文本框,用于键入输入掩码,借以指定字段的输入格式,限制输入数据的范围,控制输入的正确性。
“标题”用于设置字段的显示标题,使用户更容易理解。
例:
在student的sno字段中,设置字段的标题为“学号”后,在表浏览器中查看记录时显示的字段名称就是“学号”,而不是“sno”。
5)字段注释:
Vf允许为每个字段添加字段注释,便于日后维护数据库。
2..2修改表结构:
在表设计器中,可以增加或删除字段,修改字段名、字段长度和字段数据类型等,也可以增加、删除或者修改索引标志。
修改表的结构首先要打开表设计器。
方法:
1)在数据库设计器中选中要修改的表后单击鼠标右键,选择“修改”菜单命令
2)打开要修改的表文件,再使用命令:
MODIFYSTRUCTURE
2.3赋值表及表结构
1)复制表:
格式:
copyto表名
说明:
复制当前表记录到指定表中,新表结构和内容与当前表一致。
2)复制表结构:
Copystructureto表名
作用:
复制当前表的结构到指定表中,该命令只复制出表的结构,而不复制表中的记录。
注意:
在vf中为了书写的方便,一般可以用命令的前4个字母表示命令,如:
Modi表示modify,stru表示structure。
但是,对于系统中存在前4个字母相同的两条命令,则不能这么表示。
三、表的操作:
表的基本操作包括向表中添加新纪录、删除无用的记录、修改有问题的记录、查看记录等。
3.1打开表
1)通过项目管理器打开表
2)通过“打开”对话框打开表
3)通过命令方式打开表(格式:
use[<表名>|?
])
3.2打开浏览器
1)通过项目管理器浏览器
2)在数据库中打开浏览器
3)命令方式打开浏览器(格式:
BROWSE)
注:
用命令方式打开浏览器前,表必须打开,也就是必须先用use命令打开表。
3.3通过浏览器操作表
1)浏览操作p83表4-2常用浏览操作
2)添加记录使用热键:
ctrl+Y或菜单命令“表”->“追加新纪录”,在浏览器尾部增加一条空白记录。
3)修改记录将光标定位于在需要修改的记录上就可以实现对记录的修改
4)删除记录
选择”表””删除记录”菜单命令完成逻辑删除。
逻辑删除后,记录已经打上了删除标记。
若想实现物理删除,只需选择”表””彻底删除”菜单命令即可。
注意:
逻辑删除记录指的是,对记录加上一个删除标记,记录没有从磁盘中消失,当需要的时候可以恢复,就像我们把文件放到回收站里一样,而物理删除会把记录从磁盘上彻底删除。
3.4命令方式操作表
1)添加记录命令(格式:
append[blank])
说明:
a.在表的尾部增加记录。
b.blank在表的尾部增加一条空白记录,然后利用EDIT,CHANGE或BROWSE命令交互修改空白记录的值,或用REPLACE直接修改空白记录值。
c.如果不指定bland短语,立刻交互输入新的记录值,一次可以连续输入多条新的记录。
2)插入记录命令(格式:
insert[before][blank])
说明:
a.如果不指明before,将在当前记录之后添加一个记录,否则在当前记录之前添加。
b.如果不指定blank则出现一个界面,然后利用EDIT,CHANGE或BROWSE命令交互修改空白记录的值,或用REPLACE直接修改空白记录值。
c.如果在表上建立了主索引或候选索引,则不能用以上的append或insert命令插入记录,必须用sql的insert命令插入记录。
3)删除记录命令
●逻辑删除命令(delete[for<条件表达式>])
说明:
如果不用for限制语句,则只删除当前记录;
如果使用for语句则逻辑删除“逻辑表达式”为真的所有记录。
●恢复记录的命令(recall[for<条件表达式>])
说明:
如果不用for限制语句,则只恢复当前的一条记录;
如果使用for语句来限定条件,则恢复具有逻辑删除标记的使该条件为真的所有记录。
●物理删除有删除标记的记录(PACK)
说明:
执行该命令后,所有被逻辑删除的记录将被全部删除,并且该操作不可恢复,即记录将从磁盘上永远地消失。
●物理删除表中的全部记录(ZAP)
说明:
该命令将物理删除表中所有的记录,不管是否有删除标记,但仍保留表结构。
4)修改记录命令
(1)交互修改:
EDIT和CHANGE用于对当前记录进行交互修改和编辑。
(2)直接修改:
REPLACE<字段名1>WITH表达式1[,<字段名2>WITH表达式2]…[FOR<条件表达式>]
说明:
该命令是用“表达式”的值代替“字段名”的值,一次可以实现修改多个字段值的目的;如果不使用FOR语句限定条件,则对当前记录进行操作;如果使用FOR语句,则修改“条件表达式”为真的所有记录。
5)显示记录命令
格式:
LIST/DISPLAY[[FIELDS]<字段名表>[FOR,<条件表达式>][OFF][TOPRINTER|TOFILE文件名]
说明:
FIELDS:
用逗号分隔的字段名列表,默认显示全部字段。
FOR:
指对满足条件的记录进行操作。
ToPRINTER:
指将结果输出到打印机。
TOFILE:
说明将结果输出到文件。
注:
list和display的区别是:
在不使用条件时,list默认显示全部记录,display默认显示当前记录。
6)查询定位命令(将指针定位到想要操作的记录上)
1)GOTO直接定位(等价于GO直接定位)(格式:
GO记录号|TOP|BOTTOM)
说明:
●通过记录号可以直接定位;
●Top是表头,不使用索引时是表的第一条记录,使用索引时是索引项排在最前面的索引对应记录;
●Bottom是表尾,不使用索引时是表的最后一条记录,使用索引时是索引项排在最后面的索引对应记录。
2)SKIP基准定位(格式:
SKIPn)
说明:
n可以使正的或是负的整数,默认是1;如果是正数,则向后移动;如果是负数,则向前移动。
注:
skip是按照逻辑顺序定位的。
即如果使用索引时,是按照索引项的顺序定位的。
3)LOCATE条件定位(LOCATEFOR<条件表达式>)
说明:
●“条件表达式”是查询定位的表达式,该命令执行后将记录指针定位在满足条件的第一条记录上,如果没有满足条件的记录则指向文件结束位置。
●为了判别locate命令是否找到了满足条件的记录,可以使用函数found(),如果有满足条件的记录,该函数返回逻辑真(.T.),否则返回逻辑假(.F.)。
●如果想要指针定位到下一个满足条件的记录,可以使用continue命令。
同样,如果没有记录满足条件,则指针指向文件结束位置。
四.索引
与图书中的索引很相似,用来快速地查找到相应的内容。
表的索引是一个记录号(图书中内容标题)的列表,它通过指针(页码)指向待处理的记录,通过索引可以快速找到指定的记录。
4.1索引的概念:
改变表中记录的逻辑顺序,不改变表中记录的物理顺序
文件开始标记
记录1
记录2
记录3
记录4
记录5
记录6
文件结束标记
表文件(.dbf):
数据(记录)的物理顺序
测文件开始标志函数:
bof()返回值逻辑型
测文件结束标志函数:
eof()返回值逻辑型
逻辑型常量的表示方法:
.T.,.t.,.Y.,.y.,.f.,.F.,.N.,.n.
文件一共有6条记录,这个表中的顺序就是记录的物理顺序。
记录号3
记录号4
记录号1
记录号5
记录号6
记录号2
索引文件:
存储记录号(逻辑顺序)
索引文件中存了记录号,记录在磁盘中的顺序没变,但在索引文件中记录号的顺序变了,在我们访问记录的时候按索引文件的记录号顺序输出,那么访问记录的顺序是:
341562这改变的是记录的逻辑顺序。
vf表文件中的记录一般按其磁盘存储顺序输出,这种顺序称为物理顺序。
索引是在不改变表中记录的物理顺序的前提下,在文件中存储一些指向记录的指针,这些指针逻辑上按照索引关键字进行排序,改变了记录的逻辑顺序。
索引文件和表的.dbf文件分别存放,在索引文件中所有关键字值按升序或降序排列,且每个值对应原文件的一个记录号,这样便确定了记录的逻辑顺序。
4.2索引的类型
1)按功能分:
索引类型
功能
建立索引的个数
主索引
指定字段或表达式中不允许出现重复值(相当于主关键字)
1个
候选索引
指定字段或表达式中不允许出现重复值(候选关键字)
多个
惟一索引
允许存在重复值,但重复的索引值只有惟一的一个值出现在索引中
多个
普通索引
允许字段中出现重复值,并且索引项中也允许出现重复值
多个
说明:
A.主索引和候选索引的最大区别是在一个数据库表中只能建立一个主索引,但可以建立多个候选索引,它们具有相同的功能。
B.惟一索引是为了保持同早期版本的兼容性,它的“惟一性”是指索引项的惟一,而不是字段值的惟一。
惟一索引允许存在重复值,重复的索引值惟一的一个值出现在索引项中;而普通索引在索引项中允许出现重复值。
2)按文件扩展名分类:
单索引文件(.idx)和复合索引(.cdx)
单索引文件:
只有一个索引关键字表达式,即只有一个入口;
复合索引文件:
可以包含多个索引关键字表达式,复合索引又分为结构复合索引和非结构复合索引两种,这些索引关键字表达式称为索引标识(tag)。
结构复合索引文件的主名与表文件的主名相同,它会随着表的打开而自动打开;而非结构索引文件需要使用setindex命令或use命令中的Index子句打开。
4.3索引文件的建立
1)利用表设计器建立索引
2)利用命令建立索引
格式:
INDEXON<索引表达式>
TO<索引文件名>|TAG<标记名>[OF<索引文件名>]
[FOR<条件表达式>]
[ASCENDING|DESCENDING]
[UNIQUE|CANDIDATE]
[ADDITIVE]
说明:
a)<索引表达式>:
可以是字段名,或包含字段名的表达式。
b)TO<索引文件名>|TAG<标记名>[OF<索引文件名>]
1.TO<索引文件名>用来建立单索引文件(索引表达式是一个字段名);
2.TAG<标记名>用来建立结构复合索引文件(索引表达式是多个字段名的表达式);
3.OF<索引文件名>用来建立非结构复合索引文件(索引表达式是多个字段名的表达式)。
c)[FOR<条件表达式>]:
给出索引过滤条件,只要索引满足条件的记录,该选项一般不使用。
d)[ASCENDING|DESCENDING]:
说明建立升序或降序索引,默认的是升序。
e)UNIQUE:
说明建立惟一索引;CANDIDATE:
说明建立候选索引;没有指定索引类型,则为普通索引
f)[ADDITIVE]:
与建立索引本身无关,说明现在建立索引时是否关闭以前的索引,默认关闭已使用的索引,使新建立的索引成为当前索引。
注:
没有指定索引类型,则为普通索引,该命令不能建立主索引。
单索引文件只能通过该命令建立,在表设计器中建立的索引都为结构复合索引。
4.4索引文件的使用
1)打开索引文件(格式:
SETINDEXTO[<索引文件名>])
说明:
与表名相同的结构复合索引在打开表时可以自动打开,但对于单索引文件和非结构复合索引文件来说,在使用之前要用命令方式打开它。
3)指定当前索引(格式:
SETORDERTO[索引序号|[TAG]索引名])
Setorderto//表示关闭当前打开的所有索引
Setordertoabc//表示指定abc索引文件为当前索引
Setorderto3//表示指定索引序号为3的索引文件为当前索引
说明:
其中可以按索引序号或索引名指定当前索引,索引序号即建立索引的先后顺序号。
如果不使用“[索引序号|[TAG]索引名]”子句,则表示关闭当前打开的所有索引。
3)使用索引快速定位
格式:
SEEK字段值[ORDER索引序号|[TAG]索引名]
[ASCENDING|DESCENDING]
Seek姓名//表示索引文件打开的情况下,按姓名定位记录
说明:
在索引打开的情况下对记录进行快速定位,可以使用索引序号或索引名指定按那个索引定位。
4)删除索引
格式:
DELETETAG索引名(删除指定索引)
DELETETAGALL(删除全部索引)
也可以在表设计器中删除索引。
五、数据完整性
5.1实体完整性与主关键字
功能:
保证表中记录惟一,也就是说,一个表中不可以有重复的记录。
实现:
主关键字和候选关键字(如果一个字段的值或几个字段的值能够惟一标志表中的一条记录,则这样的字段称为候选关键字。
一个表中,可能会有几个符合这种要求的字段,可以从中挑选一个作为主关键字。
)
5.2域完整性与约束规则
功能:
对表中字段取值的限定。
实现:
域约束规则。
说明:
vf中提供的字段有效性规则有:
规则、信息和默认值。
其中,规则是逻辑表达式;信息是字符串表达式;默认值的类型则由字段的类型决定。
5.3参照完整性和表之间的关联
功能:
当插入、删除和修改一个表中的数据时,通过参照引用相互关联的另一个表中的数据,来检验对表中数据的操作是否正确。
实现:
通过连接字段来体现和表示,连接字段在附表中是主关键字,在子表中是外部关键字。
参照完整性
插入(字表插入)
删除(父表删除)
修改(父表修改)
忽略
不作参照完整性检查,可以随意插入子记录
不作参照完整性检查,删除父表的记录时与字表无关
不作参照完整性检查,可以随意更新父记录的连接字段值
限制
若父表中没有相匹配的连接字段值则禁止插入子记录
子表中有相关的记录,禁止删除父表中的记录
若子表中有相关记录,则禁止修改父表中的连接字段值
级联
自动删除字表中的所有相关记录
用新的连接字段值自动修改子表中的所有相关记录
六、自由表(不属于任何一个数据库)
自由表不属于任何数据库,但是一个数据库表只能属于一个数据库
6.1自由表和数据库表的联系与区别
数据库表从数据库中移去之后就成为自由表、自由表添加到数据库中就成为数据库表,数据库表和自由表之间可以相互转化。
相对于自由表而言,数据库表的特点:
●数据库表可以使用长表名,在表中可以使用长字段名;数据库名字最长128个字符,自由表名最长10个字符。
●可以为数据库表的字段指定默认值和输入掩码;
●可以为数据库表的字段指定标题,添加注释;
●可以为数据库表规定字段级规则和记录级规则;
●数据库表的字段有默认的控件类;
●数据库表支持主关键字、参照完整性和表之间的联系
●支持insert,update和delete事件触发器。
而自由表中这些功能都不能实现。
6.2建立自由表
1)在项目管理器中新建自由表
2)菜单方式新建自由表
3)命令方式新建自由表(create命令)
注:
在建立自由表的时候,不能打开数据库,否则建立的就是数据库表。
并且一个表只能属于一个数据库。
6.3将自由表添加到数据库中
1)使用项目管理器向数据库中添加表
2)使用数据库设计器向数据库添加表
3)使用命令向数据库中添加表
格式:
ADDTABLE[<表名>|?
][NAME<长表名>]
说明:
<表名>:
是添加到数据库中的表名。
不输入表名或输入?
将显示一个“打开”对话框,等待用户选择一个表添加到数据库中。
[NAME<长表名>]:
为表指定一个长名,最多可以有128。
注:
一个表只能属于一个数据库,所以我们向数据库中添加的表一定是自由表,如果我们把其他数据库中的表添加到当前数据库,就会出现错误提示。
6.4从数据库中移去表
1)使用项目管理器从数据库中移去表
2)使用数据库设计器从数