2020/5/241第4章数据库操作与SQL语言讲述数据库的概念和相关操作以及SQL结构化查询语言2020/5/242数据库(DataBase)就是按一定的组织结构存储在计算机内可共享使用的相关数据的集合。它以文件的形式组织管理一个或多个数据文件,并被多个用户所共享,它是数据库管理系统的重要组成部分。在VisualFoxPro中,数据库包含有数据库表、视图等数据实体,又提供了数据字典、各种数据保护和数据管理功能,可将数据库看成是个收集表的“容器”。数据库文件的扩展名是.dbc,在建立数据库时,系统还会建立一个扩展名是.dct的数据库备注文件和一个扩展名是.dcx的数据库索引文件,因此VisualFoxPro数据库包括这3个文件。数据库基本概念2020/5/2434.1数据库基本操作4.1.1数据库建立数据库的建立有两种方法:使用“数据库设计器”和使用建立数据库的命令。1.用数据库设计器建立数据库菜单“文件”|“新建”,打开“新建”对话框,选定“文件类型”为“数据库”选项按钮,单击“新建文件”,打开“创建”对话框,在“数据库名”文本框中输入所建的数据库名,单击“保存”按钮→建立数据库,同时打开“数据库设计器”窗口。利用“数据库设计器”提供的工具或菜单,可以方便的建立数据库表或建立视图,也可以将自由表添加到数据库中,成为数据库表,以及建立数据库表间的永久关联关系等数据库操作。2020/5/244利用“数据库设计器”,新建数据库rsgzk.dbc,并将表rsb.dbf、gzb.dbf、bmdm.dbf和zz.dbf添加到新数据库中,成为数据库表。①建立数据库:菜单“文件”|“新建”命令,选“文件类型”为“数据库”选项按钮,单击“新建文件”,在“数据库名”文本框中输入rsgzk.dbc,单击“保存”按钮,此时建立数据库rsgzk.dbc,同时打开“数据库设计器”窗口。②添加数据表:在“数据库设计器”窗口,单击“数据库设计器”工具中的“添加表”按钮,在“打开”对话框中选定rsb.dbf,单击“确定”按钮,rsb.dbf就添加到了rsgzk数据库中,用同样的方法添加表gzb.dbf、bmdm.dbf和zz.dbf。[例4-1]2020/5/245命令格式:CREATEDATABASE[数据库名]功能:建立一个数据库同时打开它。例如建立gzk.dbc的命令如下:CREATEDATABASEgzk2.用命令方式建立数据库2020/5/246数据库表:归属于某个数据库的表称为数据库表。自由表:独立存在、不与任何数据库相关联的表称为自由表。数据库表与自由表是VisualFoxPro中表的两种存在状态,这两种表是可以相互转化的,需要注意的是当数据库表转化成自由表时,其数据库表特有的属性将会丢失。数据库表的优点:可以使用长表名,可以使用长字段名;可以为字段制定标题和添加注释;可以为字段制定默认值和输入掩码;字段有默认的控件类;可以为字段设定字段级规则和记录级规则;支持插入、更新和删除事件的触发器;支持主关键字,表间永久关系和参照完整性规则等。3.数据库表2020/5/2474.1.2数据库操作命令1.打开数据库命令命令格式:OPENDATABASE[数据库名]功能:打开一个数据库。例如打开数据库gzk.dbc的命令如下:OPENDATABASEgzk2.关闭数据库命令命令格式:CLOSEDATABASE[ALL]功能:关闭当前的数据库和它的表。选择ALL表示关闭所有打开的数据库和它们的表、所有的自由表以及索引文件,返回1号工作区。例如关闭当前数据库gzk.dbc的命令如下:CLOSEDATABASE2020/5/248命令格式:MODIFYDATABASE[数据库名]功能:打开数据库设计器,以交互方式查看和修改当前数据库。例如查看和修改数据库gzk.dbc的命令如下:MODIFYDATABASEgzk.dbc4.向数据库中添加表命令命令格式:ADDTABLE表名功能:向当前数据库添加一个自由表。例如向数据库gzk.dbc添加自由表gzb1.dbf(它为gzb.dbf的复制表)和zz1.dbf(zz.dbf的复制表)。OPENDATABASEgzkADDTABLEgzb1ADDTABLEzz1MODIFYDATABASE&&查看添加到数据库里的表CLOSEDATABASE3.查看和修改数据库结构2020/5/249命令格式:REMOVETABLE表名功能:从当前数据库中移去一个表。例如从数据库gzk.dbc中移出表zz1.dbf。OPENDATABASEgzkREMOVETABLEzz1&&在确认对话框选“是”,移出数据库表zz1MODIFYDATABASE&&查看移出表后的数据库CLOSEDATABASE6.删除数据库命令命令格式:DELETEDATABASE数据库名功能:从磁盘中删除一个数据库文件。例如从磁盘中删除数据库文件gzk.dbc。CLOSEDATABASEALL&&关闭所有打开的数据库DELETEDATABASEgzk.dbc&&在确认对话框选“是”,删除数据库5.从数据库中移去表命令2020/5/2410命令格式:PACKDATABASE功能:从当前数据库中将做了删除标记的记录清除掉。说明:使用该命令时要求当前数据库必须是独占打开,并且数据库表和视图均没有被打开使用。例如清理数据库gzk.dbc的命令如下:OPENDATABASEgzkPACKDATABASECLOSEDATABASE7.清理数据库命令2020/5/2411命令格式:SETDATABASETO[数据库名]功能:指定一个打开的数据库,使它成为当前数据库。如果省略数据库名,则打开的数据库都不会成为当前数据库。例如,打开2个数据库,设置第一个数据库为当前数据库,然后使用DBC()函数显示当前数据库的名称:OPENDATABASErsgzkOPENDATABASEgzkSETDATABASETOrsgzk?DBC()&&在屏幕上显示rsgzk.dbc8.选择当前数据库命令2020/5/2412数据库文件(.DBC文件)本身也是一个表,表中存储了有关数据库及其对象的所有信息。数据库中的每个表、视图、字段、索引标记、永久关系等都有一条记录。例如浏览数据库rsgzk.dbc的命令如下:CLOSEDATABASEALL&&浏览前首先关闭.DBC文件USErsgzk.dbc&&打开数据库文件必须指明扩展名.DBCBROWSE9.浏览数据库文件2020/5/24134.2数据字典数据字典就是包含数据库中所有表信息的一个表。存储在数据字典中的信息称之为元数据,包括长表名、长字段名、有效性规则、触发器,表间永久关系以及数据库对象的定义等。使用数据字典,可以设置字段级和记录级的有效性检查,保证主关键字字段内容的唯一性。4.2.1字段级规则字段级规则主要包括显示属性、字段有效性和字段注释三部分。2020/5/2414“格式”文本框中输入格式化代码,确定该字段在浏览窗口、表单和报表中显示的格式,它是对字段格式进行整体控制的。字段级规则设置“输入掩码”文本框中键入掩码代码,输入掩码是按位来控制格式的。显示的标题改为自己希望的标题字段有效性就是用于数据输入正确性的检验。说明该字段的用途、特性、使用说明等补充信息字段级规则2020/5/24154.2.2记录级规则记录级规则主要包括记录有效性、触发器的设置和表注释。“教授的基本工资要≥1650元,其他职工为:550≤基本工资≤3000职称=教授.AND.基本工资=1650.OR.职称#教授.AND.(基本工资=550.AND.基本工资=3000)每逢星期一才可做插入、追加、更新和删除记录的操作:CDOW(DATE())=Monday2020/5/24164.2.3表间规则1.永久关系永久关系是数据库表间的关系,它们存储在数据库文件中。利用“数据库设计器”来建立永久关系:在“数据库设计器”中,用鼠标从一个表的主索引或候选索引拖到另一个表的任一索引,当出现表间关联连线时就表示关系已建立。用鼠标右键单击连线,弹出快捷菜单,可以进行删除关系、编辑关系和编辑参照完整性操作。[例4-2]为例4-1的数据库rsgzk.dbc中的各表建立永久关系。(1)建立各表的索引。(2)利用数据库设计器,画出表间关系连线。建立表rsb与表gzb的连线:形成一条一一关系连线建立表rsb与表zz的连线:形成一条一多关系连线建立表rsb与表bmdm的连线:形成一条多一关系连线2020/5/2417一一关系连线多一关系连线一多关系连线各表间的永久关系2020/5/24182.参照完整性参照完整性是控制数据库中不同表的主关键字和外部关键字之间数据一致性的关系规则。参照完整性则属于表间规则。用户可以通过“参照完整性生成器”来进行规则设置,从而控制相关表的更新、删除和插入记录的数据完整性。(1)打开“参照完整性生成器”窗口双击两表之间的连线,在“编辑关系”对话框中选定【参照完整性】按钮。(2)设置更新、删除、插入三个规则更新规则:是指修改父表中关键字值时所使用的规则,包括级联、限制和忽略3种。删除规则:是指删除父表中的记录时使用的规则,包括级联、限制和忽略3种。插入规则:是指在子表中插入新的记录,或更新已存在的记录时所用的规则,包括限制和忽略2种。2020/5/2419更新规则删除规则插入规则级联当父表中的关键字值被修改时,系统用新的关键字值更新子表中所有相关记录当父表的记录被删除时,系统相应的删除子表中所有相关记录限制若子表有相关记录,则系统禁止父表中的关键字值被修改若子表有相关记录,则系统禁止父表的记录被删除若父表中不存在匹配的关键字值,则禁止在子表插入一个新记录或更新一个已存在的记录忽略允许更新允许删除允许插入参照完整性的各项功能2020/5/2420在浏览bmdm表时将计算机系的代码修改为A04,则子表rsb中部门是计算机系的所有记录的部门代码字段值都被更新为“A04”。参照完整性设置举例2020/5/24214.3关系型数据库标准语言SQLSQL是StructuredQueryLanguage(结构化查询语言)的英文缩写,它是关系型数据库的标准操作语言,几乎所有的数据库产品都采用和支持该语言。SQL是一种综合的、通用的、功能强大的关系数据库语言,它包括数据定义语言(DDL)、数据操纵语言(DML)、数据控制语言(DCL)三大部分。数据定义语言:用于定义、修改和撤消数据库、表对象等。数据操纵语言:用于数据库中表记录的修改和检索等。数据控制语言:用于数据访问权限的控制等。2020/5/24224.3.1SQL数据定义命令1.建立表2.修改表的结构3.删除表2020/5/2423命令格式:CREATETABLE|DBF表名1[NAME长表名][FREE](字段名1字段类型[(字段宽度[,小数位数])][NULL|NOTNULL][CHECK逻辑表达式1[ERROR提示信息1]][DEFAULT表达式1][PRIMARYKEY|UNIQUE][REFERENCES表名2[TAG标记1]][NOCPTRANS][,字段名2…][,PRIMARYKEY表达式2TAG标记2|,UNIQUE表达式3TAG标记3][,FOREIGNKEY表达式4TAG标记4[NODUP]REFERENCES表名3[TAG标记5]][,CHECK逻辑表达式2[ERROR提示信息2]])|FROMARRAY数组名功能:由给定的字段参数建立一个数据表。1.建立表2020/5/2424建立人事管理数据库rsgl.dbc,并用SQL命令建立rs.dbf(编号C(4),姓名C(8),身份证号C(18),性别C(2),出生日期D,基本工资N(9,2),简历M),表中编号字段为主关键字。代码如下:CLOSEDATABASESALL&&关闭所有数据库CREATEDATABASESrsgl&