Delphi 实用教程

73
第7第 第第第第第第第第第第 Delphi 实实实实 实 7 实 实实实实实实实实实实

description

Delphi 实用教程. 第 7 章 数据库基本概念和操作. 7.1 数据库基本概念 7.1.1 数据和数据库. 数据是可以被计算机接受和处理的符号。根据所表示的信息特征不同,数据有不同的类别,如数字、文字、表格、图形图像、声音等等。 数据库( Database ,简称 DB ),顾名思义,就是存放数据的仓库,其特点是数据按照数据模型组织,是高度结构化的,可供多个用户共享并且具有一定的安全性。 关系数据库是按照二维表结构方式组织的数据集合,二维表由行和列组成,表的行称为元组,列称为属性,对表的操作称为关系运算,主要的关系运算有投影、选择和连接等 。. - PowerPoint PPT Presentation

Transcript of Delphi 实用教程

Page 1: Delphi 实用教程

7 第 章 数据库基本概念和操作

Delphi 实用教程

第 7 章 数据库基本概念和操作

Page 2: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.1 数据库基本概念 7.1.1 数据和数据库

数据是可以被计算机接受和处理的符号。根据所表示的信息特征不同,数据有不同的类别,如数字、文字、表格、图形图像、声音等等。 数据库( Database ,简称 DB ),顾名思义,就是存放数据的仓库,其特点是数据按照数据模型组织,是高度结构化的,可供多个用户共享并且具有一定的安全性。 关系数据库是按照二维表结构方式组织的数据集合,二维表由行和列组成,表的行称为元组,列称为属性,对表的操作称为关系运算,主要的关系运算有投影、选择和连接等。

Page 3: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.1.2 数据库管理系统 数据库管理系统即 DBMS ( DataBase Management System ),它是位于用户应用程序和操作系统之间的数据库管理系统软件,其主要功能是组织、存储和管理数据,高效地访问和维护数据,即提供数据定义、数据操纵、数据控制和数据维护等功能。 数据库系统即 DBS ( DataBase System ),是指按照数据库方式存储和维护数据,并向应用程序提供数据访问接口的系统。它有四部分组成:

数据库计算机硬件(支持 DB 存储和访问)软件(包括操作系统、 DBMS 、及应用开发支撑软件)数据库管理员( DBA , DataBase Administrator )

数据库系统通常分为桌面型数据库系统和网络型数据库系统两大类。

Page 4: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.1.3 关系数据库语言 SQL 结构化查询语言 SQL ( Structured Query Language )是用于关系数据库操作的标准语言 SQL 虽然名为查询语言,但实际上具有数据定义、查询、更新和控制等多种功能,它使用方便、功能丰富、简洁易学等特点。

Page 5: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.1.4 表和视图 1. 表( Table )

● 表 是用来存储和操作数据的一种逻辑结构。表由行和列组 成,因此也称之为二维表。

● 表结构 组成表的各列的名称及数据类型 ● 记录 表中的一行● 字段 构成记录的每个数据项 ● 关键字 表中唯一标识一条记录的某一字段或字段组

合能● 主键 一个表有多个候选关键字,则选定其中一个

为主关键字 ● 外关键字 某字段或字段组合不是本表的关键字,而是

另外表关键字

Page 6: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.1.4 表和视图2. 视图( View )

视图是从一个或多个表(或视图)导出的表。它是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义,对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。

视图有下列优点:(1)   为用户集中数据,简化用户的数据查询和处理。

(2)   屏蔽数据库的复杂性。 (3)  简化用户权限的管理。(4)  便于数据共享。

Page 7: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.1.5 数据库设计 数据库应用程序开发的目标是建立一个满足用户需求的软件产品。在开发数据库应用程序之前必须仔细了解用户需求,对数据库进行认真的规划设计,这是决定开发是否成功的关键。通常数据库所包含的大量信息是以表的形式存储,数据库中有的表是独立的,有的表之间存在一定关系,设计数据库就是将大量信息经过分析和归纳,分别存储到多个表中,确定表之间的相互关系。

Page 8: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.1.6 常用数据库简介 1. Paradox

Paradox是 Delphi 7 自带的一个小型桌面数据库,它是 Delphi 7开发小型的桌面型数据库系统应用程序一个比较好的选择。 Paradox数据库、表的建立与维护,均通过 Delphi 7提供的数据库设计工具 Database Desktop进行。

2. Access Microsoft Access 是 Office套件中提供的一个桌面型数据库,它是在Windows环境下开发的一种全新的关系型数据库系统,具有某些大型数据库的基本功能,如支持事务处理、具有用户组和多用户管理功能、具有一定的安全性和完整性保护功能等。

3. 大型数据库常用的大型数据库有 Interbase 、 Oracle 、 Sybase 、 Inf

omix 、 DB2 和 Microsoft SQL Server 等。

Page 9: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2 数据库、表的创建与维护本节使用的几个表的结构 :

Page 10: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2 数据库、表的创建与维护

Page 11: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.1 Paradox 数据库、表操作 1. BDE 中创建数据库

BDE是通过别名( alais )来管理数据库的,所谓别名是为数 据库指定的名称,通过 Delphi 7所提供的 BDE Administrator 可对别名所对应的数据库属性及驱动程序参数进行配置,配 置的参数将被保存在名为 IDAPI32.CFG的配置文件中。 BDE 使用别名对数据库进行管理的优点是可以使得应用程序在开 发和运行时都不必涉及所使用的后台数据库的类型。如在 BDE 中创建别名为 Student 数据库,操作方法如下: (1) 建立与 Student 数据库对应的文件夹,设该文件夹名为 d:\par

adoxDB 。 (2) BDE Administrator 中配置Paradox数据库,使之支持中文。

Page 12: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.1 Paradox 数据库、表操作(3) 创建名为 Student 的数据库,方法是:选择 BDE Administ

rator窗 口左边的 Database 选项卡,单击鼠标右键,在弹出的快捷 菜单上选择 New,如图。再在所弹出的选择数据

库驱动程序对 话框中选择 STANDARD ,单击OK。

Page 13: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.1 Paradox 数据库、表操作 (4) 然后为所创建的数据库命名,并配置 Student 数据库的

属 性参数, 如图。

Page 14: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.1 Paradox 数据库、表操作可设置的参数有:   DEFAULT DRIVER :默认的数据库驱动程序。

   ENABLE BCD :是否支持对数字进行 BCD编码。   PATH :设置数据库对应的路径。本例设置路径为

d:\paradoxDB 。 (5) 保存所创建的数据库及配置信息,选择 BDE Administrator 主菜单下

的 ObjectApply命令项,将弹出保存数据库确认对话框,单击OK即可 保存。

Page 15: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.1 Paradox 数据库、表操作2. 创建表 在 Database Desktop中创建表 students ,操作方法如下: (1) 运行 Database Desktop,依次选择开始程序 Borland

Delphi 7Database Desktop,其界面如图。

Page 16: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.1 Paradox 数据库、表操作(2) 新建表,选择 Database Desktop主菜单的 FileNewTable命令项,将弹出选择新

建表类型的对 话框,选择 PARADOX 7,单击OK。(3) 上一步结束后,将出现创建表的窗口,该窗口分为左

右 两部分,左边是字段信息输入区,共有 5列,第一列是 字段序号,由系统自动生成,

其余四列分别为:       Field Name (字段名):可输入最多 25 个字 符作为

字段名,设置 Paradox 支持中文后,可使用中文字 段名。

     Type (数据类型):可直接输入数据类型的缩写字 母(如字符串类型输入 A 、数值类型输入 N 等等), 也可单击鼠标右键打开弹出式菜单

选择数据类型。      Size (长度):设定字段的长度。      Key (是否为关键字):若某字段为关键字,则该

列显示 * 号。

Page 17: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.1 Paradox 数据库、表操作 创建表的界面

创建表的窗口 字段类型

Page 18: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.1 Paradox 数据库、表操作(4) 保存新建的表,单击创建表窗口的 Save As 按钮,将出现“ Sav

e Table As” 对话框,在其中选择表的保存路径、保存的数据库类型和表所属的数据库名,并输入表名。

Page 19: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.1 Paradox 数据库、表操作3. 修改表结构 ( 1)打开表,在 Database Desktop中选择主菜单 FileOpen

->Table…命令项,或单击工具栏上的( Open Table )按钮,

将出现“Open Table” 对话框,选择需打开的数据库、表,单

击打开按钮。

Page 20: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.1 Paradox 数据库、表操作( 2)在所出现的如图所示的表结构编辑窗口中选择主菜单下的 Table Restructure…命令项,或单击工具栏上的( Restructu

re ) 按钮,将打开一个新窗口,在其中可进行修改字段各属性的操作。

工具栏上的( Restructure )按钮

Page 21: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.1 Paradox 数据库、表操作此时出现的修改表结构的窗口

Page 22: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.1 Paradox 数据库、表操作4. 向表中添加记录

向 students 表中添加一批记录,操作方法如下: ( 1 )打开表,方法与修改表结构的第一步操作相同。 ( 2)选择主菜单的 TableEdit Data命令项,进入表编辑状

态,此时就可以进行数据添加操作了。 ( 3)逐行输入数据。输入数据时,要注意几点:一是关键

字字段值要唯一;二是输入的数据要与字段的数据类 型相符;三是字段长度的限制;四是英文字符、数字 等与汉字所占字节数的区别。( 4 )保存数据,输入完成后,选择主菜单的 FileClose 即

可保存表数据。

Page 23: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.1 Paradox 数据库、表操作 向表中添加记录的界面窗口:

Edit Data 按钮

记录定位按钮

添加的记录

Page 24: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.1 Paradox 数据库、表操作说明:

BDE Administrator 的主要功能是以别名的方式管理数据库,由于 Paradox本身并没有数据库概念,故要将相关的几个表组织在一起形成“数据库”,需借助于 BDE Administrator 的数据库管理功能。 BDE Administrator 更主要的功能是通过别名配置的方式对数据库进行引用和管理。

Page 25: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.2 SQL Server 2000 数据库、表操作 1. 在企业管理器中进行数据库、表操作

●SQL Server 2000 企业管理器是 Microsoft 管理控制台的管理单

元组件。选择开始程序 Microsof SQLServer企业管理器,即可启动 SQL Server 2000 企业管理器 , 其主界面如图所示。

Page 26: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.2 SQL Server 2000 数据库、表操作●SQL Server企业管理器共享一个用于Web 管理的 MMC用户界面子集,它通过易于使用的图形用户界面,将所有 SQL Server对象展现在一个分层结构的控制台树中,按照“数据库服务器组”“数据库服务器”“数据库”“数据库对象 (表、视图等 )” 的层次结构组织对象并进行管理的。利用企业管理器可对数据库服务器、数据库及数据库对象(表、视图等)进行有效地管理。

Page 27: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.2 SQL Server 2000 数据库、表操作( 1 )创建数据库

在 SQL Server 2000中,能够创建数据库的用户必须是系统 管 理员,或是被授权使用 CREATE DATABASE语句的用户。 创 建数据库时,必须要确定数据库名、所有者(即创建数据 库的用户)、数据库大小(最初的大小、最大的大小、是否 允许增长及增长方式)和存储数据库的文件。

下面说明使用企业管理器创建数据库的过程。 ( 1)在“ SQL Server Enterprise Manager”窗口中展

开 Microsoft SQL Servers 和 SQL Server 组,选择

SQL Server服务器。在选择的 SQL Server服务器上点击鼠 标右键,在所出现快捷菜单上选择“新建”“数据库…”。 ( 2)上一步操作结束后,出现下图所示的“数据库属性”

对话框,在“常规”选项卡的“名称”文本框中输入欲创建的 数据库名。

Page 28: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.2 SQL Server 2000 数据库、表操作输入数据库名:

Page 29: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.2 SQL Server 2000 数据库、表操作( 3)选择“数据文件”选项卡,在文件名为“ Student_DATA”这一

行 的 “初始大小”列将系统缺省大小1改为 5,设置是否允许数据库增

长、增长方式以及最大文件大小,见图标注。

( 4)在数据库属性对话框中选择“事务日志”选项卡,与第 3步类似, 设置日志文件的初始大小、是否增长、增长方式及最大大小。

( 5)单击“确定”按钮,数据库就创建完成了。

Page 30: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.2 SQL Server 2000 数据库、表操作2 )修改数据库

增加或删除数据文件改变数据文件的大小和增长方式改变日志文件的大小和增长方式增加或删除日志文件增加或删除文件组在进行任何数据库修改操作以前,都要在“企业管理器”中选择需要进行修改的数据库,在该数据库名上点击鼠标右键,出现快捷菜单,选择“属性”,将弹出数据库属性对话框,如下图所示。该对话框包括六个选项卡,通过“数据文件”和“事务日志”两个选项卡可以修改这两类文件的属性,还可增加或删除文件。

Page 31: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.2 SQL Server 2000 数据库、表操作

数据库属性对话框

增加或删除数据文件改变数据文件的大小和增长方式选

项卡增加或删除日志文件改变日志文件的大小和增长

方式选项卡

增加或删除文件组选项卡

Page 32: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.2 SQL Server 2000 数据库、表操作3 )创建表

通过“企业管理器”创建表操作步骤: ( 1)启动 SQL Server 企业管理器,用鼠标右键单击选择数

据库 Student ,在所出现的快捷菜单上选择“新建 (N)”“ 表 (T)…” ,将弹出如图编辑窗口。

Page 33: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.2 SQL Server 2000 数据库、表操作( 2)在编辑窗口中分别输入或选择各列的名称、数据类型、是否 允许为空值等属性,在 studentid 列上单击鼠标右键,选择 “设置主键”菜单项,将 studentid 列设置为主键。( 3)在表的各列属性均编辑完成后,单击(保存)按钮,在所出现 的“选择表名”对话框中输入 students ,单击“确定”,

students 表就创建完成。

Page 34: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.2 SQL Server 2000 数据库、表操作4 )表记录的添加、修改和删除

在创建了一个表之后,使用过程中可能对表结构、约束或其它 列的属性需要进行修改。对一个已存在的表可以进行的修改操 作包括:       更改表名      增加列      删除列      修改已有列的属性(列名、数据类型、是否为空值)

Page 35: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.2 SQL Server 2000 数据库、表操作 向表中添加记录操作窗口

Page 36: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.2 SQL Server 2000 数据库、表操作2. 通过 T-SQL 命令进行数据库、表操作

1 )使用 CREATE DATABASE 语句创建数据库▲语法: CREATE DATABASE database_name // 指定数据库名 [ ON 子句 ] // 指定数据库文件和文件组属性 [ LOG ON 子句 ] // 指定日志文件属性其中:      database_name :是所创建的数据库逻辑名称,其命名须 遵循 SQL Server 2000 的命名规则,最大长度为 128 个字

符。     ON子句:指出了数据库的数据文件和文件组,其格式为:

ON [PRIMARY][<filespec>[,…n]] [,<filegroup>[,…n]]

其中 PRIMARY 用来指定主文件。若不指定主文件,则 诸数据文件中的第一个文件将成为主文件。

Page 37: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.2 SQL Server 2000 数据库、表操作 数据文件的描述主要给出文件的逻辑名、存储路径、大 小及增长特性(这些特征可以与界面创建数据库时对

数 据库特征的设置相联系)。其语法定义为:<filespec>::= ( NAME = ‘ 逻辑文件名’ , FILENAME = ‘ 操作系统文件名’[,SIZE = size][,MAXSIZE = {max_size | UNLIMITED }][,FILEGROWTH = growth_increament] )

<filegroup> 定义文件组的属性,语法格式为:<filegroup>::=FILEGROUP 文件组名 <filespec>[,…

n] 文件组中各文件的描述和数据文件描述相同。

       LOG ON子句:用于指定数据库事务日志文件的属性, 其定义格式与数据文件的格式相同。

Page 38: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.2 SQL Server 2000 数据库、表操作【例】创建 Student 的数据库

CREATE DATABASE StudentON

( NAME = 'Student_data', FILENAME = 'e:\sql\data\MSSQL\data\Student.mdf')

GO分析:本例创建一个名为 Student 的数据库,数据库只包含一个主数据 文件和 一个主日志文件,它们均采用系统默认存储路径和文件名,大小分别为 model数据库中主数据文件和日志文件的大小。

Page 39: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.2 SQL Server 2000 数据库、表操作2 )使用 ALTER DATABASE 修改数据库

▲语法: ALTER DATABASE database_name { ADD FILE <filespec>[,…n][ TO FILEGROUP filegroup_name ]

// 在文件组中增加数据文件 | ADD LOG FILE <filespec>[,…n] // 增加日志文件

| REMOVE FILE logical_file_name // 删除数据文件 | ADD FILEGROUP filegroup_name // 增加文件组 | REMOVE FILEGROUP filegroup_name // 删除文件组 | MODIFY FILE <filespec> // 更改文件属性 | MODIFY NAME = new_dbname // 数据库更名

}

Page 40: Delphi 实用教程

7.2.2 SQL Server 2000 数据库、表操作下面说明主要关键字和子句的构成和作用:       database_name :数据库名       ADD FILE子句:向数据库添加数据文件,文件的属性由 <filespec> 给出,关键字 TO FILEGROUP指出了添加的数据文件所在的文件组 (filegroup_name),缺省则为主文件组。       ADD LOG FILE子句:向数据库添加日志文件,日志文件的属性由 <filespec>给出。       REMOVE FILE子句:从数据库中删除数据文件,被删除的数据文件由 其中的参数 logical_file_name给出。当删除一个数据文件时,逻辑文件 与物理文件全部被删除。     ADD FILEGROUP子句:向数据库中添加文件组,被添加的文件组名由 参数 filegroup_name给出。   REMOVE FILEGROUP子句:删除文件组,被删除的文件组名由参数 filegroup_name给出。    MODIFY FILE子句:修改数据文件的属性,被修改文件的逻辑名由 <filespec>的NAME参数给出,可以修改的文件属性包括: FILENAME、 SIZE、 MAXSIZE和 FILEGROWTH,一次只能修改其中的一个属性。       MODIFY NAME子句:更改数据库名,新的数据库名由参数

new_dbname给出。

Page 41: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.2 SQL Server 2000 数据库、表操作【例】设已经创建了数据库 Student ,

它只有一个主数据文件,其逻辑文件名为 Student_Data ,物理文件名 e:\sql\data\MSSQL\data\Student_Data.mdf,大小为5MB ,最大大小为 50MB ,增长方式为按 10%增长;有一个日志文件,逻辑名为 Student_LOG,物理名为 e:\sql\data\MSSQL\data\Student_Log.ldf,大小为 2MB ,最大大小为5MB ,每次增长 1MB 。修改数据库 Student现有数据文件的属性,将主数据文件的最大大小改为不限制,增长方式改为按每次5MB增长。

分析:因为需修改主数据文件的两个属性,而使用 ALTER DATABASE语句一次只能修改数据文件的一个属性,所以需要执行两次ALTER DATABASE 命令。

Page 42: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.2 SQL Server 2000 数据库、表操作ALTER DATABASE Student

MODIFY FILE (NAME = Student_Data,MAXSIZE = UNLIMITED)

GO // 这是第一次,将主数据文件的最大大小改为不限制。ALTER DATABASE Student

MODIFY FILE (NAME = Student_Data,FILEGROWTH = 5MB)

GO // 这是第二次,将主数据文件的增长方式改为按 5MB增长。

Page 43: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.2 SQL Server 2000 数据库、表操作删除数据库的 T-SQL 命令是 DROP 。▲ 语法: DROP DATABASE database_name[,…n]

其中 database_name 是要删除的数据库名。

Page 44: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.2 SQL Server 2000 数据库、表操作3 )使用 CAREATE TABLE 命令创建表

▲ 语法: CREATE TABLE table_name

( {column_name datatype |identity | NOT NULL | NULL}) 其中: ●table_name 为表名,必须遵守 T-SQL 标识符命名规则。 ● column_name 为列名 ● datatype 为列的数据类型 ● identity 指出该列为标识符列, ● NULL 表示列可取空值, ● NOT NULL 表示列不可取空值。

Page 45: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.2 SQL Server 2000 数据库、表操作【例】在 Student 数据库中创建表 students 。

USE StudentCREATE TABLE students( studentid char(6) NOT NULL,

name char(20) NOT NULL, sex bit NOT NULL, birthday smalldatetime NOT NULL, departmentid int NOT NULL, totalscore tinyint NULL,

)GO分析:首先使用 USE Student命令将数据库 Student 指定为当

前数据 库,然后使用 CREATE TABLE语句在数据库 Student 中创建表 students 。

Page 46: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.2 SQL Server 2000 数据库、表操作4 )使用 ALTER TABLE 修改表结构

▲ 语法: ALTER TABLE table_name {[ALTER COLUMN column_name // 修改已有列的属性 { new_data_type [ (precision,[,scale])] [NULL | NOT NULL] ]} | ADD {[<colume_definition>]}[,…n]// 增加新列 | DROP {[CONSTRAINT] constraint_name| COLUMN column}[,…n] // 删除列

Page 47: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.2 SQL Server 2000 数据库、表操作其中:  table_name 为表名。  ALTER COLUMN子句:用于说明修改表中指定列的属性,要修改的列名由 column_name给出, new_data_type 为被修改列的新的数据类型。

   ADD子句:向表中增加新列,新列的定义方法与 CREATE TABLE语句中定义列的方法相同。

   DROP子句:从表中删除列或约束, COLUMN参数中指定的是被删除的列名, constraint_name 是被删除的约束名。

Page 48: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.2 SQL Server 2000 数据库、表操作【例】修改表 students 中已有列的属性:将 name 列长度由原来

的 20 改为 10 ;将 birthday 列的数据类型由原来的 smalldatetime

改 为 datetime 。USE StudentALTER TABLE students

ALTER COLUMN name char(10)ALTER COLUMN birthday datetime

GO

另外,删除表的 T-SQL命令是 DROP TABLE。 ▲ 语法: DROP TABLE table_name 其中 table_name 是要被删除的表名。

Page 49: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.2 SQL Server 2000 数据库、表操作5 )表数据添加

▲ 语法: INSERT table_name VALUES ( constant1,constant2,…) 该命令的功能是向由 table_name 指定的表中加入由

VALUES 指定各列值的行。 例如 :

要向 Student 数据库的表 students 中插入如下的一行: 990206 罗亮 0 "1/30/1980" 1 150 可以使用以下的 T-SQL 语句: USE Student INSERT INTO students

VALUES('990206','罗亮 ', 0 ,'1/30/1980', 1, 150) GO

Page 50: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.2 SQL Server 2000 数据库、表操作6 )表数据删除

▲ 语法: DELETE [FROM]

{ table_name | view_name } [WHERE <search_condition>]

该语句的功能为从 table_name 指定的表或 view_name 所指 定的视图中删除满足 <search_condition>条件的行,若省 略该条件,表示删除所有行。

Page 51: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.2 SQL Server 2000 数据库、表操作例如 :

要将 Student 数据库的 students 表中 name 为“罗亮”的行删除可使用如下的 T-SQL 语句:USE Student

DELETE FROM students WHERE name='罗亮 'GO使用 TRANCATE TABLE 命令将删除指定表中的所有数据,因此也称其为清除表数据命令,其语法格式为:

TRANCATE TABLE name其中 name 为所要删除数据的表名。由于 TRANCATE TABLE语句将删除表中的所有数据,且无法恢复,因此使用时必须十分当心。

Page 52: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.2 SQL Server 2000 数据库、表操作7 )表数据修改

▲ 语法: UPDATE { table_name | view_name }

SET column_name = {expression | DEFAULT | NULL } [,…n]

[WHERE <search_condition>] 该命令的功能是:将 table_name 指定的表或 view_name 指

定 的视图中满足 <search_condition>条件的记录中由 SET指 定的各列的列值设置为 SET指定的新值,若不使用WHERE 子句,则更新所有记录的指定列值。

Page 53: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.2.2 SQL Server 2000 数据库、表操作例如 :

要将 students 表中的所有 departmentid 为 1的学生总学分都增加 10,可使用以下的语句:UPDATE students

SET totalscore = totalscore +10WHERE departmentid = 1注意 :

若UPDATE 命令中未使用WHERE子句限定范围,将更新表中的所有行。

Page 54: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.3 SQL 语言简介 SQL 语言是关系数据库操作的标准语言,具有数据定义、查询、更新和控制等多种功能。 SQL 语言由 3 部分组成:

数据定义语言( DDL , Data Description Language )。用于执行数据库定义的任务,对数据库以及数据库中的各种对象进行创建、删除、修改等操作。 数据操纵语言( DML , Data Manipulation Language )。用于操纵数据库中各种对象,检索和修改数据。 数据控制语言( DCL , Data Control Language )。用于安全管理,确定哪些用户可以查看或修改数据库中的数据。

Page 55: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.3 SQL 语言简介

Page 56: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.3.1 SELECT 查询 SELECT查询是 SQL 语言的核心。在数据库应用中,最常用的操作是查询,同时查询还是数据库的其它操作(如统计、插入、删除及修改)的基础。 SELECT语句很复杂,主要的子句如下。▲语法: SELECT [DISTINCT] [ 别名 .] 字段名或表达式 [AS 列标题 ]

// 指定要选择的列或行及其限定 FROM table_source

// FROM子句,指定表或视图 [ WHERE search_condition ] // WHERE子句,指定查询条件 [ GROUP BY group_by_expression ] // GROUP BY子句,指定分组表达式 [ ORDER BY order_expression [ ASC | DESC ]]

// ORDER子句,指定排序表达式和顺序 */

Page 57: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.3.1 SELECT 查询SELECT 子句指出查询结果中显示的字段名,以及字段名和

函数组成的表达式等。可用 DISTINCT去除重复的记录行; AS 列标题指定查询结果显示的列标题。若要显示表中所有字 段时,可用通配符“ *”代替字段名列表。GROUP BY 子句和 ORDER BY 子句分别对查询结果分组和排序。WHERE子句定义了查询条件。 WHERE子句必须紧跟 FROM子句之后,其基本格式为:

Page 58: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.3.1 SELECT 查询WHERE <search_condition>其中 search_condition 为查询条件,常用格式为:{ [ NOT ] <precdicate> | (<search_condition> ) } [ { AND | OR } [ NOT ] { <predicate> | (<search_condition>) } ] } [ ,…n ]其中 predicate 为判定运算,结果为 TRUE 、 FALSE 或 UNKNOWN ,格式为:{ expression { = | < | <= | > | >= | <> | != | !< | !> } expression // 比较运算 | string_expression [ NOT ] LIKE string_expression [ ESCAPE 'escape_charac

ter' ] // 字符串模式匹配 | expression [ NOT ] BETWEEN expression AND expression // 指定范围 | expression IS [ NOT ] NULL // 是否空值判断 | expression [ NOT ] IN ( subquery | expression [,…n] ) // IN 子句 | expression { = | < | <= | > | >= | <> | != | !< | !> } { ALL | SOME | ANY } ( subquery )

// 比较子查询 | EXIST ( subquery ) // EXIST子查询}

Page 59: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.3.1 SELECT 查询【例】本例对 Student 数据库进行各种查询。( 1)查询 Student 数据库的 students 表中各个同学的姓名和总学

分。 USE Student SELECT name,totalscore FROM students 说明:在下面的例子中,均省略 USE Student 语句。

( 2)查询表中所有记录。查询 students 表中各个同学的所有信息。 SELECT * FROM students

( 3)简单条件查询。查询 students 表中总学分大于等于 142的同学

的情况。 SELECT * FROM students

HERE totalscore >= 142

Page 60: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.3.1 SELECT 查询( 4)多重条件条件查询。查询 students 表中所在系编号为 1且总学分大 于等于 142的同学的情况。

SELECT * FROM students WHERE departmentid=1 AND totalscore >= 142( 5)使用 LIKE谓词进行模式匹配。查询 students 表中姓“王”且单名的 学生情况。

SELECT * FROM students WHERE name LIKE '王 _'( 6)用 BETWEEN…AND 指定查询范围。查询 students 表中不在1979 年出生的学生情况。

SELECT * FROM students WHERE birthday NOT BETWEEN '1979-1-1' and '1979-12-31'( 7) 用 IN指定查询范围。查询 students 表中所在系代码为 1或 2或 3

学 生的情况。

SELECT * FROM students WHERE departmentid IN ( 1, 2, 3)

Page 61: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.3.1 SELECT 查询( 8)空值比较。查询总学分尚不定的学生情况。

SELECT * FROM students WHERE totalscore IS NULL( 9)自然连接查询。在 students 数据库中有描述院系代码的表 codes ,表的结构和样本数据见附录 A 。查找计算机系的学生 情况。

SLELCT *,department FROM students,codes WHERE students.departmentid = codes.departmentid

AND codes.department = '计算机 '

Page 62: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.3.1 SELECT 查询( 10) IN 子查询。在 students 数据库中有描述课程情况的表

courses 和描述学生成绩表的表 grades 。查找选修了课 程号为 101的课程的学生的情况。

SELECT * FROM studentsWHERE studentid IN

( SELECT studentid FROM courses WHERE courseid = '101' )

在执行包含子查询的 SELECT语句时,系统先执行子查询,产生一个结果表,再执行外查询。本例中,先执行子查询:SELECT studentid FROM courses WHERE courseid = '1

01'得到一个只含有 studentid 列的结果表, courses 中 cou

rseid 列值为‘ 101’ 的行在该结果表中都有一行。再执行外查询,若 students 表中某行的 stuentid 列值等于子查询结果表中的任 一个值,则该行就被选择到最终结果表中。

Page 63: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.3.1 SELECT 查询( 11)比较子查询,这种子查询可以认为是 IN 子查询的扩展,它使 表达式的值与子查询的结果进行比较运算。查找课程号 206的 成绩不低于课程号 101的最低成绩的学生的学号。

SELECT studentid FROM grades WHERE courseid = '206' AND grade !< ANY ( SELECT grade FROM grades

WHERE courseid = '101')( 12) EXISTS子查询。 EXISTS谓词用于测试子查询的结果是否为空

表,若子查询的结果集不为空,则 EXISTS返回 TRUE,否则返 回 FALSE。 EXISTS还可与 NOT结合使用,即 NOTEXISTS ,

其 返回值与 EXIST刚好相反。查找选修206号课程的学生姓名。

SELECT name FROM students WHERE EXISTS ( SELECT * FROM grades WHERE studentid = students.studentid AND

courseid = '206')

Page 64: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.3.1 SELECT 查询( 13)查找选修了全部课程的同学的姓名(即查找没有一门功课不 选修的学生)。

SELECT name FROM students WHERE NOT EXISTS ( SELECT * FROM courses WHERE NOT EXISTS ( SELECT * FROM grades WHERE studentid=XS.studentid AND cour

seid=courses.courseid )

)( 14)查询结果分组。将各课程成绩按学号分组。

SELECT studentid,grade FROM grades GROUP BY studentid( 15)查询结果排序。将代码为 1的系的学生按出生时间先后排序。

SELECT * FROM students WHERE departmentid = 1 ORDER BY birthday

Page 65: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.3.2 常用聚合函数

聚合函数表 :

Page 66: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.3.2 常用聚合函数【例】本例对 Students 数据库表执行查询,使用常用的聚合函数。 (1) 求选修 101课程的学生的平均成绩。

SELECT AVG(grade) AS '课程 101平均成绩 ' FROM grades WHERE courseid = '101' (2) 求选修 101课程的学生的最高分和最低分。

SELECT MAX(grade) AS ‘课程 101 最高分’ , MIN(grade) AS ‘课程 101 最低分 '

FROM grades WHERE courseid = '101' (3) 求学生的总人数。

SELECT COUNT(*) AS '学生总数 ' FROM students

Page 67: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.4 存储过程 存储过程是存放于数据库中的子程序,它在服务器端运行,具有执行速度快、功能封装和安全操作等优点。如果应用程序需要对大量数据进行某些操作(如计算总和或平均值)或反复执行某些操作,就可将这种重复性高或计算密集的工作设计为存储过程。存储过程中必须使用服务器端的 SQL 语言,因此它不容易移植。SQL Server 2000 中存储过程是数据库对象之一,有 5 种类型的存储过程:系统存储过程、本地存储过程、临时存储过程、远程存储过程和扩展存储过程,其中与数据库应用开发关系最密切的是本地存储过程,它是指由用户创建的用户数据库的存储过程。

Page 68: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.4.1 创建存储过程 1. 使用 SQL 语句创建存储过程 ▲语法: CREATE PROC[EDURE] procedure_name [ ; number ] // 定义过程名 [ { @parameter data_type } // 定义参数的类型 [ VARYING ] [ = default ] [ OUTPUT ] ] // 定义参数的属性 [ ,...n1 ] [ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION }] // 定义存储过程的处理方式[ FOR REPLICATION ]AS sql_statement [ ...n2 ]

// 执行的操作

Page 69: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.4.1 创建存储过程

参数的含义如下: procedure_name 是定义的存储过程名  sql_statements 是一组 SQL 语句,用于描述所定义的存储过程所要执行的操作。

  @parameter 为存储过程的形参,@符号作为第一个字符来指定参

数名称。  Default 指定存储过程输入参数的默认值,默认值必须是常量或 NULL ,默认值中可以包含通配符(%、 _、 []和 [^]),如果

定义 了默认值,执行存储过程时根据情况可不提供实参。  关键字 OUTPUT用于指定参数从存储过程返回信息。 n1:表

示可为存储过程指定若干个参数。

Page 70: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.4.1 创建存储过程2. 在企业管理器中创建存储过程 启动企业管理器后,在需要创建存储过程的数据库的“存储过程”对象上单击鼠标右键,在所弹出的快捷菜单上选择“新建存储过程”命令项,则打开存储过程编辑对话框,如图所示。在该对话框的文本编辑窗口中输入存储过程的 SQL 语句,单击“确定”按钮即可保存所创建的存储过程。

Page 71: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.4.2 执行存储过程 使用 EXEC命令执行一个已经定义的存储过程,该命的基本语法格

式如下。 ▲语法: EXEC[UTE] procedure_name

其中, procedure_name 是要被执行的存储过程名。【例】定义一个存储过程 computerstu ,从 Students 数据库中查找计

算机系的学生情况。本例所创建的存储过程不带参数。 USE Students GO CREATE PROCEDURE computerstu AS SLELCT *,department

FROM students,codes WHERE students.departmentid = codes.departmentid

AND codes.department = ' 计算机 ' GO 执行上面的存储过程的语句是: EXECUTE computerstu

Page 72: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.4.2 执行存储过程【例】本例创建带参数的存储过程。定义一个存储过程 Query_de

partment ,从 Students 数据库中查找 指定系学生情况,所查找的系名由输入参数 department 指定。

USE Students GO CREATE PROCEDURE Query_department ( @department char(20) ) AS SLELCT *,department FROM students,codes WHERE students.departmentid = codes.departmentid

AND codes.department = @department GO

Page 73: Delphi 实用教程

7 第 章 数据库基本概念和操作

7.5 Delphi 7 的数据库体系结构 Delphi 7 中,访问数据库有两种方式:

BDE方式BDE ( Borland Database Engine )是 Borland 数据库引擎,它

是 Delphi 7

中操作数据库的主要方式,其中又有直接访问和通过 ODBC 访问两种 具体方法。

ADO方式它基于 OLE DB ,简化了数据库应用程序的开发。使用 ADO 组件访问数据库时,也可借助 ODBC驱动程序,即 OLE DB Provider

ODBC Drivers 。 ADO 方式主要用于对网络数据库的访问。Delphi 7 提供了几个辅助数据库应用程序的开发的工具

Datbase Desktop 是管理桌面数据库的工具。BDE Administrator配置以 BDE 方式访问的数据库的连接参数。SQL Explorer 用于管理 BDE 方式访问的数据库信息。 SQL Monitor 用于跟踪应用程序执行 SQL命令的过程。 Datapump 是数据转换工具,可将数据在不同数据库之间转移中。