第3章 数据库表的创建和使用.docx
《第3章 数据库表的创建和使用.docx》由会员分享,可在线阅读,更多相关《第3章 数据库表的创建和使用.docx(29页珍藏版)》请在冰豆网上搜索。
第3章数据库表的创建和使用
第三章数据库与表的创建和使用
3.1数据库的概述
3.1.1数据库的组成
数据库的基本组成
数据库由一个以上相互关联的数据表组成,可以包含一个或多个表、视图、到远程数据源的连接和存储过程。
数据库表:
一张数据库表只能属于一个数据库,数据库表与数据库之间通过
双向链接实现的;前链(在数据库中),后链(在数据库表中)
视图(view):
一个保存在数据库中的、由引用一个或多个表、或其他视图的
相关数据组成的虚拟表,可以是本地的、远程的或带参数的。
存储过程(storedprocedure):
是保存在数据库中的一个过程。
该过程
能包含一个用户自定义函数中的任何命令和函数。
数据库文件:
扩展名为.DBC
创建数据库时系统数据库备注文件:
扩展名为.DCT
自动生成3个文件数据库索引文件:
扩展名为.DCX
3.1.2数据字典(自学)
3.2数据库的创建、打开、关闭
数据库文件:
扩展名为.DBC
创建数据库时系统数据库备注文件:
扩展名为.DCT
自动生成3个文件数据库索引文件:
扩展名为.DCX
3.2.1数据库的创建
1.菜单操作方式创建数据库(菜单,工具栏,项目管理器)
2.命令方式创建数据库
Createdatabase[数据库名|?
]
3.2.2数据库的打开、关闭
(1)打开数据库:
方法1:
菜单操作:
方法2:
命令方式:
opendatabase数据库名
(2)关闭数据库:
1)“项目管理器”选定数据库进行关闭
2)从命令窗口中输入命令:
closedatabase&&关闭当前数据库,并同时关闭其表
closedatabaseall&&关闭所有打开的数据库
closeall&&关闭所有被打开的数据库,项目管理器
注意:
1)关闭了数据库表不等于关闭了数据库,但关闭了数据库则其中的数据表被同时关闭;
2)用鼠标关闭了数据库设计器窗口并不能代表关闭数据库。
(3)删除数据库:
1)资源管理器:
2)命令方式:
deletefile数据库名
3)项目管理器:
3.3表的创建与使用
3.3.1表结构的概述
表(数据表):
是指存放在磁盘文件中的一张二维表。
自由表:
不属于任何数据库的表。
数据库表:
包含在一个数据库中的表,只属于一个数据库。
表文件名:
表名可以由字符、数字或下划线组成,但不可用A-J中的单个字母做文件名,系统自动给出的扩展名为.DBF。
备注文件名:
当表中有备注型或通用型字段时,系统自动生成与所属数据表的表名相同、扩展名为:
.FPT的文件名。
表结构:
存储表记录的公共结构。
(就是指一张表的表头结构,即字段的属性)。
字段:
表中的一列。
它规定了数据的特征。
记录:
表中的一行。
它是多个字段的集合,同一张表的每个记录都有相同的字段。
1.关系型数据表的特点:
(1)每一个字段不可再分解,也不能有名字相同的字段;
(2)每一列中的数据都有相同的数据类型;
(3)表中没有内容完全相同的行(记录)。
(4)表中任意两行或两列都可以任意交换。
2.字段的基本属性:
包括:
字段名、数据类型、字段宽度、小数位数、是否支持空值
◆字段名:
即每个字段的名字,必须以字符开头,可由字符、数字、下划线组合而成,字母大、小写无区别,但其中不许有空格或其它字符。
自由表的字段名最多由10个字符组成,数据库表的字段名支持长名,最多可达128个字符。
如果从数据库中移去一个表,那么此表的长字段名将被截短成10个字符。
◆数据类型:
指该字段的数据特征(C,Y,D,T,L,N,M,G)。
◆字段宽度:
指该字段所能容纳数据的最大字节数。
◆小数位数:
指数值型数据将保留几位小数。
此时的字段宽度=整数位数+1+小数位数。
◆NULL值(空值):
用来指示记录中的一个字段有或没有数据的标识,NULL不是一种数据类型或一个值,NULL不等同于零或空格。
一个NULL值不能认为比某个值(包括另一个NULL值)大或小,相等或不同。
VFP6.0表中字段的数据类型
字段类型
代号
说明
字段宽度
使用示例
字符型
C
字母、汉字和数字型文本
每个字符为1个字节,最多可有254个字符
学生的学号或姓名,"8199101"或'李立'
货币型
Y
货币单位
8个字节
工资,$1246.89
日期型
D
包含有年、月和日的数据
8个字节
出生日期,
{02/25/2000}
日期时间型
T
包含有年、月、日、时、分、秒的数据
8个字节
上班时间,
{02/25/20009:
15:
15AM}
逻辑型
L
“真”或“假”的布尔值
1个字节
课程是否为必修课,
.T.或.F.
数值型
N
整数或小数
在内存中占8个字节;在表中占1至20个字节
考试成绩,83.5
通用型
G
OLE对象
在表中占4个字节
图片或声音
备注型
M
不定长度的一段文字
在表中占4个字节
学生简历
3.3.2表结构的创建
1.创建表结构:
其实就是设计字段的基本属性。
可以使用表设计器、SQL命令来创建表结构。
(1)使用表设计器创建表结构
步骤:
从文件菜单中单击新建→在新建对话框中选择表并单击新文件→在创建对话框中给出文件名并确定所需的保存位置→在表设计器对话框中逐个输入所需字段(用↓或鼠标换行),全部字段输入完成后单击确定。
(2)使用CREATETABLE-SQL命令
该命令的一般格式为:
CREATETABLE|dbf<表文件名>(字段名1字段类型[(字段宽度[,小数位数])][,字段名2字段类型[(字段宽度[,小数位数])]]……)
例:
1.CREATETABLExscj(xhc(8),xmc(6),xbc
(2),;cjn(5,1),ksrqd)
2.CREATETABLEXS(GHC(6)NOTNULL,XMC(8)NULL,CSRQDNULL)
2.表结构的修改
(1)用表设计器修改
A.用项目设计器调出表结构设计器:
B.用命令调出表结构设计器:
USE<表文件名>
MODIFYSTRUCTURE
(2)使用ALTERTABLE-SQL命令
功能
命令格式示例
添加字段
ALTERTABLExscjADD[COLUMN]kcmcC(14)
修改字段
ALTERTABLExscjALTER[COLUMN]kcmcC(14)
重命名字段
ALTERTABLExscjRENAMECOLUMNkcmcTOkc
删除字段
ALTERTABLExscjDROP[COLUMN]kc
举例:
3.3.3字段属性与表属性
1.字段的扩展属性
1)字段的标题与注释:
增强表的可读性
字段标题
在浏览表时用此名称代替意义不够直观的字段名(不要加引号)
字段注释
使字段具有更好的可读性,进一步的解释字段的意思(不要加引号)
举例:
a)为ts表设置flh字段的标题为“分类号”;
b)为ts表设置flh字段的注释为“flh为图书的分类号”;
2)字段的显示属性:
用来指定输入和显示字段时的格式
格式
确定字段内容在被显示时的样式(A,D,K,T,!
)(T!
)
输入掩码
指定字段中输入数据的格式(即所输入的任何内容均显示成此符号)(A,X,.,,,9)
举例:
a)为ts表设置flh字段的有关属性,使该字段中输入的字母均为大写字母;
b)为表的gh字段设置输入掩码,使输入值为开头第一个为字母,其他为数字字符
c)为xs表设置xh字段的有关属性,使在输入和显示xh时其前导空格自动删除;
3)字段的默认值
向表中添加新记录时,为字段所指定的最初的值称为该字段的默认值,在设置字段默认值时,默认值必须是一个与字段数据类型一致的表达式或一个值
举例:
a)为xs表设置xb字段的默认值为“男”;
4)字段的有效性规则和有效性信息:
仅对修改对应字段值是激活该规则
规则
用来控制输入到字段中的数据的取值范围,或所输数据必须满足的条件,该规则是一个逻辑表达式
信息
当所输数据违反(不满足)规则时,系统提示出错的消息,该信息为一个字符型表达式(必须要加引号)
举例:
a)为ts表的cs字段设置字段的有效性规则和有效性说明信息,要求:
其值必须大于0;
b)为xs表的xb字段设置字段的有效性规则,要求性别为“男”或“女”
c)为cj表的cj字段设置字段的有效性规则,要求cj大于等于0并且小于等于100
5)字段的默认控件类:
作用是指定用“表单向导”生成表单或从数据环境中将字段拖放到表单上时,与该字段相应的控件类。
举例:
a)为ts表设置cs字段的有关属性,使该字段从表单的数据环境中拖放到表单上时,生成相应控件为微调框控件;
2.数据库表的表属性:
长表名,表注释,记录验证规则及信息,触发器等
1)长表名与表注释
长表名
默认情况下,表名为表文件名,对数据库表,允许再定义一个表名(长表名),最大长度为128个字符。
表注释
表的说明信息,对表的进一步解释,与字段注释一样,不需要加引号
举例:
a)为ts表设置长表名为“tushubiao”;
2)记录有效性规则和信息:
在改变记录值时激活该规则
有效性规则
用来校验记录的多个字段之间的关系是否满足某种条件,该规则为
逻辑表达式,如果满足则可以修改记录,否则不可以修改
有效性信息
如果修改记录时违反(不满足)该规则时,系统提示出错的信息,有效性信息为一个字符型表达式,必须要加引号
举例:
a)为ts表添加一个数据类型,字段宽度与cs字段相同的字段,字段名为jccs,并设置其标题为“借出册数”,并设置ts表的记录级有效性规则及其说明信息,要求:
jccs字段值不能大于cs字段值;
b)为js表设置记录有效性规则,要求教师的csrq(出生日期)小于gzrq(工作日期)
3)表的触发器:
触发器是绑定在表上的逻辑表达式,当表中的任何记录被指定的操作命令(插入,更新,删除)修改时,在进行了其他所有检查之后被激活
插入触发器
当所插记录符合此规则时,才可以插入到表中(必须为逻辑表达式)
更新触发器
当修改后的记录符合此规则时,才可以进行修改(必须为逻辑表达式)
删除触发器
当待删记录符合此规则时,才可以被删除掉(必须为逻辑表达式)
逻辑表达式的构造:
1)将否定条件转化为肯定条件,构造符合肯定条件的表达式
2)取特殊值进行试探并修改该逻辑表达式
举例:
a)为ts表设置更新触发器,要求:
分类号(flh)字段的值为空格字符串时不可更新;
b)为xs表设置删除触发器,要求:
xh(学号)前两位在“00”到“05”之间的可以删除
c)设置xs表的插入触发器,禁止插入
3.3.4表的打开与关闭
1.工作区
(1)工作区:
指用来标识一张打开的表的区域。
一个工作区在某一时刻只能打开一张表,但可以同时在多个工作区打开多张表,一张可以在多个工作区中多次被打开。
每个工作区都有一个编号(1~32767(前十个工作区号也可以用字母A~J表示)),在VFP系统启动后,系统默认当前工作区号为1。
(2)表的别名:
在工作区中打开表时为该表所定义的名称。
可以自定义别名,否则系统默认就以表名作为别名。
自定义别名的格式:
USE<表名>ALIAS<别名>
(3)当前工作区:
正在使用的工作区。
可以通过“数据工作期窗口”或用SELECT命令把任何一个工作区设置为当前工作区。
a)设置/选择当前工作区:
SELECT命令格式:
SELECT<工作区号>|<别名>
Selectn&&选择工作区号为n的工作区为当前工作区
Select0&&选择没被使用的最小工作区号的工作区为当前工作区
b)强行指定工作区(不一定是当前工作区):
要操作非当前工作区中的表,可以把其工作区设置为当前工作区,或在命令中强行指定工作区。
命令格式:
IN<工作区号>|<别名>
Usejsaliasjiaoshiin4
Usejsagainin5
Usexsin0
插入知识点:
别名的测试
(4)几个常用的函数
ØALIAS([工作区号])函数:
测试指定工作区中的表的别名,无参数时指当前工作区表的别名。
?
alias():
返回当前工作区中表的别名。
?
alias(n):
返回工作区号为n的工作区中表的别名。
ØSELECT([别名])函数:
测试指定别名的表所在的工作区号,无参数时指当前工作区的区号。
Select(0)=select():
返回当前工作区号。
Select
(1):
返回当前未被使用的最大工作区号。
Select(“表别名”)返回该表所在的工作区号。
2.表的打开和关闭
◆表的打开方式:
1.文件菜单中的打开
2.工具栏上的打开
3.USE<表名>ALIAS<别名>
4.USE<表名>IN<工作区号>
5.USE<表名>AGAININ<工作区号>
◆表的关闭方式:
1.USE&&关闭当前工作区中的表
2.USEIN<别名>|<工作区号>&&关闭指定工作区中的表
3.CLOSEALL&&关闭所有的数据库,表和索引,当前工作区设置为1
4.CLOSEDATABASE&&关闭打开的数据库,顺便关闭了其表
5.CLOSETABLES&&关闭所有打开的表
6.退出VFP系统,则关闭所有的表
3.表的独占与共享使用
独占使用:
一张表只能被一个用户打开。
VFP6.0在默认状态以独占方式打开。
共享使用:
一张表可以被多个用户同时打开。
系统的默认打开方式可以通过工具菜单中的选项…数据来设置,或用命令:
SETEXCLUSIVEOFF&&默认打开方式为共享
SETEXCLUSIVEON&&默认打开方式为独占
或强行打开:
USEcjSHARED&&以共享方式打开cj表
USEcjEXCLUSIVE&&以独占方式打开cj表
3.3.5表记录的处理
1.记录的输入
(1)表结构创建后立即输入(备注型字段,通用型字段的输入):
设计好表的结构后,系统会提示是否直接进入数据输入状态。
若选是,则进入编辑窗口,输完后单击“X”按钮退出,系统自动存盘。
需输入备注型或通用型字段的数据时,双击“memo”或“gen”,在新打开的编辑窗口中输入所需内容,输完后单击“X”按钮系统自动存盘,退回到原窗口,此时字段中的“memo”或“gen”变成“Memo”或“Gen”。
(2)在浏览窗口中追加记录(表处于浏览状态):
第一种:
利用“显示/追加方式”可以追加多条记录。
第二种:
利用“表/追加新记录”可以追加一条空记录,并且处于编辑状态等待用户输入数据。
相当与命令:
APPEND[BLANK]
APPEND:
向表中追加一条空记录,并打开表的浏览窗口以便数据该记录的数据。
APPENDBLANK:
向表中追加一条空记录.
第三种:
利用“表/追加记录”可以将其他文件(表文件,文本文件,EXCEL文件)中的数据导入到当前工作区的表中。
APPENDFROM表文件名[FIELDS字段名1,字段名2…][FOR条件]
APPENDFROM文件名[delimited/xls]
(3)使用INSERT-SQL命令
该命令的一般格式为:
INSERTINTO<表名>[(字段名1[,字段名2…])]VALUES(表达式1[,表达式2…])
例:
INSERTINTOxscj(xh,xm,cj)VALUES("81991001","张良",85.5)
2.记录的浏览
(1)通过浏览窗口
(2)通过BROWSE命令
BROWSE命令用来打开表的浏览窗口,可通过不同的子句来实现对特定记录的浏览。
BROWSE[FIELDSfieldlist][FORexpression1]
[FREEZEfieldname][NOAPPEND][NODELETE]
[NOMODIFY][TITLEexpression2]
3.记录的筛选
(1)利用工作区属性/数据过滤器进行筛选记录
(2)setfilterto[条件]
举例:
4.限制对字段的访问
(1)利用工作区属性/字段筛选进行筛选部分感兴趣的字段
(2)SETFIELDTO[字段列表]
补充VFP命令中的常用子句
1)范围子句
子句格式
功能
ALL
表示对表文件的全部记录进行操作
NEXTn
表示对从当前记录开始的共n个记录进行操作,n为正整数
RECORDn
指明操作对象是表文件的第n号记录
REST
对从当前记录起到文件结尾的全部记录进行操作
2)FOR子句
用于指明进行操作的条件。
格式:
FOR<条件>
指明只对指定范围中那些符合给定条件的进行当前操作。
例如:
listNEXT6FORcj<85
3)WHILE子句
也用于指明进行操作的条件。
格式:
WHILE<条件>
例如:
listNEXT6WHILEcj<85
注意FOR和WHILE的区别
4)FIELDS子句
用于指明当前的操作涉及到表文件的哪些字段。
格式:
BROWSE[FIELDS字段名1,字段名2……]
例如:
BROWSEFIELDSxh,xm,cj
5.记录的定位
(1)系统对记录的三个控制标志
记录开始标志:
位于第一个记录之前,表结构之后。
其值用函数BOF()进行测试。
记录指针标志:
指向当前记录。
其值用函数RECNO()进行测试。
记录结束标志:
位于最后一个记录之后。
其值用函数EOF()进行测试。
常用的函数及功能:
BOF():
测试记录指针是否位于记录开始标志。
EOF():
测试记录指针是否位于记录结束标志。
RECNO():
测试记录指针所指的记录的记录号。
RECCOUNT():
表中记录的总条数
记录指针可以理解为保存当前记录号的变量,它的初始值总是1,不可能为0或负数,最大值是表中记录总数+1。
XS表中没有记录,现在打开XS表,填写表格情况:
Bof()
Eof()
Recno()
Recount()
刚打开
.t.
.t.
1
0
Skip–1
.t.
.t.
1
0
skip
.t.
.t.
1
0
XS表中有20条记录,现在打开表,填写下表:
Bof()
Eof()
Recno()
Recount()
刚打开
.f.
.f.
1
20
Skip–1
.t.
.f.
1
20
Gobottom
.f.
.f.
20
20
Skip
.f.
.t.
21
20
(2)记录的定位方式
绝对定位:
是指把指针移到指定的位置。
(go)
相对定位:
是指把指针从当前位置开始,相对于当前记录向前或向后移动若干个记录位置。
(skip)
条件定位:
是指按一定的条件在整张表或表的某个指定范围中查找符合该条件的记录。
(locate)
通过菜单进行定位:
从表菜单中选择转到记录:
记录号——实现绝对定位
定位…——实现条件定位
通过命令进行定位
记录的定位
命令格式
功能
绝对定位
Go/gototop
将记录指针定位到表第1条记录
Go/gotobottom
将记录指针定位到表最后1条记录
Gon
将记录指针定位到指定的n号记录
相对定位
Skipn
将记录指针从当前记录向上或向下移动n个
条件定位
Locatefor<条件>[范围]
按顺序搜索表,直到找到满足指定条件的第1个记录,需要再找,用continue命令
4.记录的值的修改和删除
一张表用非只读方式打开后,即可通过菜单在浏览窗口(或编辑窗口)中或从命令窗口中用命令直接对其记录进行编辑、修改和删除。
(1)菜单方式
Ø修改记录:
从表菜单中选择替换字段…→在替换字段对话框中选择待替换的字段并构造出替换表达式及替换条件→替换。
Ø删除记录:
从表菜单中选择删除记录→在删除对话框中选择删除范围和删除条件→单击删除按钮→从表菜单中选择彻底删除→在消息框中单击是。
删除记录包括两步:
标记要删除的记录和彻底删除带删除标记的记录
Ø恢复带删除标记的记录:
从表菜单中选择恢复记录→在恢复记录对话框中选择作用范围和条件→单击恢复记录按钮。
(2)命令方式
Ø修改记录:
1)UPDATE-SQL命令(不需事先打开表)。
格式:
UPDATE<表名>SET字段1=表达式1[,字段2=表达式2…];WHERE条件表达式
2)REPLACE命令(必须先打开表)
格式:
replace字段1with表达式1[additive],字段2with表达式2[additive]……[scope][for表达式3]
举例:
放大学生成绩
Ø删除记录:
1)DELETE-SQL命令(不需事先打开表)。
格式:
DELETEFROM<表名>[WHERE条件表达式]
2)DELETE命令
格式:
delete[scope][for表达式]
例:
DELETEFROMxscjWHEREcj<60
(3)彻底删除记录
pack和zap的使用和区别。
(4)对带有删除标记的记录的访问
setdeletedon/off
on:
忽略带有删除标记的记录,不访问。
Off:
照常访问记录。
5.数据的复制(将已打开的表中数据复制到文件中(表,文本,电子表格))
copyto文件名[field字段列表][范围][FOR条件][SDF/XLS]
6.数据的统计(对表中满足有关条件的记录进行统计)
count[scope][forexp1][tovarname]
sum[求和字段][scope][forexp1][tovarname]
average[求平均字段][scope][forexp1][tovarname]
3.3.6表的索引
1.基本概念
(1)记录物理顺序:
即表中记录的存储顺序。
用记录号表示。
(2)记录逻辑顺序:
表打开后按某个(些)字段值进行排序时的处理顺序。
(3)索引:
是根据索引关键字(即索引表达式)的值进行逻辑排序的一组指针,它是由一系列记录号组成的一个列表,提供对数据的快速访问。
索引文件有索引序号和对应于索引序号的表的记录号组成。
表文件中的记录被修改或删除时,索引文件可自动更新。
(4)索引关键字(索引表达式):
用来建立索引的一个字段或几个字段组成的表达式。
注意:
1)用多个字段建