导图社区 数据库和表开发编程自学思维导图
数据库和表开发编程自学思维导图,整理了数据库的相关命令、表的基本操作、数据完整性、多工作区、表间关联(临时联系)的内容,快来看看吧!
编辑于2023-02-20 20:14:32 广东数据库和表开发编程自学思维导图
数据库的相关命令
建立数据库
create database 数据库名
数据库扩展名
.dbc文件(默认扩展名) .dct文件(备注文件) .dcx文件(索引文件)
打开数据库
open database 数据库名
数据库打开后,包含在其中的表不会被打开
修改数据库
modify database 数据库名
打开数据库设计器 若数据库未打开, 则同时自动打开数据库
关闭数据库
close database
关闭当前数据库和表
close database all
关闭所有打开的数据库和表,
并将当前工作区设置为1号工作区
close all
关闭所有打开的数据库和表,
并将当前工作区设置为1号工作区
设置当前数据库
同一时刻可打开多个数据库 但同一时刻只能有一个当前数据库
删除数据库:
delete database 数据库名
两个特殊选项:
DELETE TABLES
删除数据库文件的同时将其所包括的表从磁盘上删除
RECYCLE
可从回收站中恢复
表的基本操作
表的扩展名
创建一个表后生成 1~3个文件
.DBF是默认表名
.CDX文件是在创建索引时生成
.fpt文件是备注文件
在有备注或通用型字段时生成
表的分类
数据库表
属于某个数据库的表
表并不真正包含在数据库中,它们是独立存在的
表和数据库的关系是通过双向链接实现的
自由表
不属于任何数据库的表
数据库表和自由表的区别
数据库表可以使用长表名
可以为数据库表中的字段指定标题和添加注释。
可以为数据库表中的字段指定默认值和输入掩码
数据库表的字段有默认的控件类。
可以为数据库表规定字段级规则和记录级规则。
数据库表支持主关键字、参照完整性和表之间的联系。
支持INSERT,UPDATE和DELETE事件的触发器
delete trigger on xs for insert
表和数据库
在数据库中创建表
在数据库中创建的表是数据库表
无数据库打开时创建的表是自由表
create table
将自由表添加到数据库中成为数据库表
ADD TABLE 表名
将数据库表移出数据库成为自由表
REMOVE TABLE 表名 [ deleted]
将数据库表中关于数据库的信息(后链)去掉
FREE TABLE 表名 [ deleted]
一个数据库表只能属于一个数据库
若要将一个数据库中的数据库表添加到另一个数据库中, 则必须将该表从前一数据库中移去
表的创建
表结构
表设计器
打开表设计器
modify structure
字段类型
字段宽度
小数点算一位
空值
表示值不确定
判定 isnull()
不同与空白、空字符串、数值0等 isblank ( ) empty( )
关键字字段不允许设置为null值
字段中输入
Ctrl+0
字段扩展属性
格式
输入掩码
标题
字段有效性规则
默认值
字段注释
匹配的默认类
表级扩展属性
长表名
记录级有效性规则
触发器
问题
有时表设计器只读?
未独占打开i
自由表和数据库的表的表设计器区别
扩展属性
SQL
Create table
字段类型的英文表示
字符型是C,日期型是D,
数值型是N,整型是I,
逻辑型是L,备注型是M,
通用型是G,货币型Y
日期时间型是T
Create table(字段名 字段类型(宽度), ……)
alter table
表数据
打开/关闭表
use 表名
use
浏览表
browse
追加记录
显示菜单——追加方式
APPEND
APPEND BLANK
APPEND FROM
Insert-SQL
修改记录
Replace…with…for <逻辑表达式>
无for 条件 修改当前记录
若使用for语句,则修改所有逻辑表达式为真的
例1:Replace 成绩 with 成绩+10
例2:Replace all 成绩 with 成绩+10
例3:Replace 成绩 with 成绩+10 for 性别=“男”
例4:Replace all 成绩 with 成绩+10,姓名 with Alltrim(姓名)+“等”
用EDIT或CHANGE命令交互式修改
Upadte -SQL
删除记录
逻辑删除
在记录旁做删除标记
delete:只逻辑删除当前一条记录
delete for < 逻辑表达式>
逻辑删除满足条件的所有记录
delete-SQL
恢复记录
RECALL FOR < 逻辑表达式>
物理删除
将带删除标记的记录真正删除
PACK:物理删除带删除标记的记录
ZAP:不管带不带删除标记,将表中记录全部删除,但表结构仍然保留
等价于:
delete all
pack 的连用
是否对有删除标记的记录进行操作
set deleted on:忽略带删除标记的记录
set deleted off:允许访问带标记记录,默认
记录筛选
set filter to <逻辑表达式>
例: set filter to 性别=“男”
set filter to
若无逻辑表达式则表示所有记录
字段筛选
set field to 字段列表
例:set field to xh,xm
set fileds to
字段列表缺省时表示所有字段
查询定位命令
表文件逻辑结构
go 3:指针指向记录号为3的记录
逻辑顺序
go bottom:指针指向最后一条记录
go top:指针指向第一条记录
skip:指针下移一条记录
skip 2:指针下移2条记录
skip -3:指针上移3条记录
条件定位 (不要求表有序)
locate for 性别=“男”
指针指向第一条满足性别是“男”的记录
continue
指针指向下一条满足性别是“男”的记录上
是否找到满足条件的记录
found()为.T. 或 EOF()为.F.表示找到记录
found()为.F. 或 EOF()为.T.表示没有找到记录
与表有关的函数
BOF( )
若是则为.T.,否则为.F.,
默认测试当前工作区中的表;
若指定工作区无表打开,函数返回.F.;
若表中无记录函数返回.T.
EOF( )
测试指针是否指向最后一条记录后的位置,
若是则为.T.,否则为.F.,默认测试当前工作区中的表;
若指定工作区无表打开,函数返回.F.;
若表中无记录函数返回.T
RECNO()
返回指定表文件当前记录的记录号
若指针指向BOF处,返回值为1;
若指针指向EOF处,返回值为总记录数+1;
表打开时,指针指向第一条记录
RECCOUNT()
返回指定表文件的记录个数,不受 set deleted on|off的影响
FCOUNT()
返回打开表中的字段个数
DELETED( )
测试指定表文件中是否有删除标记,若有则返回.T.,否则为.F.
数据复制
Copy to 文件名 fields 字段列表 for 逻辑表达式 SDF|XLS
复制当前工作区中指定的表内容到文件
不指定文件类型,默认为表文件( .dbf)
SDF为文本文件(.txt)
XLS为EXCEL文件(.xls)
例
copy to xs1 for 性别=“男”
copy to xs2 fields xh,csrq xls
数据统计
(受到set deleted on/off的影响)
COUNT for <逻辑表达式> to 变量
统计符合条件的记录个数 并保存到变量
SUM 表达式 for <逻辑表达式> to 变量
统计符合条件的逻辑表达式的和
AVERAGE 表达式 for <逻辑表达式> to 变量
统计符合条件的逻辑表达式的平均值
例
Use cj COUNT for cj<60 to a SUM cj for cj<60 to b AVERAGE cj to c
表中有12条记录,6条打了删除标记 Set deleted on M=reccount() count to n ?m, n
12 6
索引
索引作用
加速对表的查询速度
更新表的速度会降低
索引的类型
主索引
在指定的字段或表达式中不允许出现重复值的索引
只有数据库表才有主索引
且一个数据库表只能创建一个主索引
候选索引
但一个表中可创建多个候选索引
其指定的字段或表达式中也不允许出现重复值
数据库表和自由表都可以有
数据库表移出数据库时,主索引变成候选索引
唯一索引
允许字段中出现重复值
索引项的唯一
普通索引
允许字段中出现重复值
索引项中也允许出现重复值
在表设计器中默认建立的索引
创建索引
方法
表设计器的“索引”选项卡中
建立的是结构复合索引
Index命令
本命令不能建立主索引
注意事项
不能基于备注型和通用型字段建立索引
不同类型字段构成表达式时, 必须转化为同一类型, 一般为字符型
xh+str(cj)
注意各字段在索引表达式中的顺序, 先排序的写在前面
例:ximing+xb
索引文件的类型
复合索引文件
扩展名为.cdx
结构复合索引文件
主文件名与表名相同
随表同步打开、更新和关闭
非结构复合索引文件
主文件名与表名不同
不随表同步打开
单独索引文件
扩展名为.idx
不随表同步打开
Index命令
Index on 索引表达式 to | tag 索引名 unique/candidate asc/desc
to 为单独索引,tag为复合索引
UNIQUE指建立唯一索引
candidate 指定建立候选索引
asc是升序,desc是降序, 默认为升序
举例
index on xh to xs
就xh字段建立独立索引文件
index on 职工号+仓库号 tag ABC candidate desc
建立一个ABC的候选索引,
是先按职工号降序排列
职工号相同的再按仓库号降序排序
按索引排序/快速定位
任何索引都不会被自动被自动设置为主控索引
默认情况下,打开的表按物理顺序排列
主控索引指作为当前排序依据的索引
指定主控索引
1 在打开表的同时指定主控索引
Use 表名 order 索引名
2 打开表后指定主控索引
Use 表名 set order to 索引名
索引快速定位命令
Seek 表达式 order 索引名
或
set order to 索引名 Seek 表达式
删除索引
DELETE TAG 索引名
删除全部索引:DELETE TAG ALL
数据完整性
实体完整性
为了保证表中记录的唯一性
利用主关键字或候选关键字实现
VFP中成为主索引、候选索引
域完整性
用于表中数据输入正确性的检验
利用字段有效性规则、信息 实现 记录有效性规则、信息
有效性规则是逻辑型表达式
cj>=0 and cj<=100
信息是字符型表达式
“成绩必须在0到100之间”
µ 参照完整性
什么是参照完整性
当插入、删除或修改一个表中的数据时, 通过参照引用相互关联的另一个表中的数据, 检查对表的数据操作是否正确
建立
首先建立表间的永久联系
表间永久联系保存在数据库中
表间永久联系的建立
必须打开数据库
一对一联系:主表和字表都使用主索引
一对多联系:主表为主索引,子表为普通索引
指定参照完整性规则
参照完整性三种规则
• 更新规则 :级联、限制、忽略
对父表而言
级联:当修改主表的关键字的值时,用新的关键字值自动修改子表的所有相关记录。
限制:当修改主表关键字的值时,若子表有相应的记录,则禁止对父表关键字的值进行修改。
忽略:当修改主表的关键字的值时,不管子表有无相应的记录,随意更新父表关键字的值
• 删除规则 :级联、限制、忽略
对父表而言
级联:当删除主表的记录时,自动删除子表的所有相关记录。
限制:当删除主表的记录时,若子表有相应的记录,则禁止删除父表中的记录。
更新忽略:当删除主表的记录时,不管子表有无相应的记录,随意删除父表中的记录。
• 插入规则 :限制、忽略
对子表而言
限制:当向子表中插入一个新记录或更新一个已经存在的记录时,若主表中不存在匹配的关键字值,则禁止在子表中插入记录。
忽略:当向子表中插入一个新记录或更新一个已经存在的记录时,不管主表,允许随意在子表中插入记录。
系统自动生成代码
多工作区
同一时刻可以打开多个数据库,每个数据库可同时打开多个表
工作区号
最小为1
最大为32767
工作区和表
默认打开的工作区为第1工作区
一个工作区中只能打开一个表
一个表可同时在多个工作区中打开
工作区别名
表文件名和别名
每个表打开后都有两个名称
表的自身名——表文件名
工作区名——别名
默认别名
前10个工作区中
A~J
后面的工作区
W11~W32767
指定并选择当前工作区
SELECT n WorkArea | cTableAlias
Select 0 选择未使用中编号最小的工作区
Select 1 选择1号工作区
举例
• Use xs 在当前工作区打开XS表
若一个表在多个工作区中打开且均未指定别名, 则第一次打开的工作区中别名与表名相同
当前工作区别名为
xs
其他工作区中别名
分别用A~J W11~W32767
• Use xs in 0 在当前未使用的最小工作区打开
• Use xs in 5 在5号工作区打开XS表
• Use xs alias xuesheng in n 在n号工作区打开
? xs.xm,
?xueseng.xm
Use xs again in 10:
在10号工作区再次打开XS
• Use in n 关闭在n号工作区中表
• Close tables:关闭所有工作区中的表
函数
select():返回工作区号,返回结果类型是数值型
Select(0):当前工作区号,
?select(“xs”)
别名:返回表别名所在的工作区号,别名必须加引号
Select(1):当前未被使用最大工作区号,
used(区号|别名)
测试指定表或工作区中是否有表打开
缺省时表示当前工作区,返回结果类型是逻辑型
alias(区号)
返回当前或指定工作区中表的别名
缺省时表示当前工作区,返回结果类型是字符型
表间关联(临时联系)
SET RELATION TO
子表需要建立索引并排序
use xs use cj in 0 order xh set relation to xh into cj
关闭VFP后临时联系自动消失