文档库 最新最全的文档下载
当前位置:文档库 › 数据库

数据库

Informix Online数据库维护技巧 来源:RealSky 作者: 责任编辑: 发表时间:2003-08-19 14:01 评论(0) 第 1 页 Informix Online数据库维护技巧第 2 页 Informix Online数据库维护技巧第 3 页 Informix Online数据库维护技巧第 4 页 Informix Online数据库维护技巧 技巧 软件 数据库 一、数据库查询用户的建立

银行Informix_on_line数据库由于存储了储户的大量重要信息,为了数据库的安全性必需要对数据的操作 有严格的规定,如进入on_line数据库要履行严格的手续,这在某些时候又给查找问题带来不便,因此有必要专门建立一个动态查询用户,该用户仅有对数据库的可读权限。

具体做法是:

1.建立查询用户,该查询用户应具有数据库使用的环境

2.将查询用户与数据库作连接(work用户为例)
ln-s/homel/work/homel/read(将查询用户read与数据库用户作连接);

3.由work用户使用数据库,将connect权限赋予read用户
grant connect to read;

4.对数据库中每一张表放select权给read用户
grant select on abc to read.(将select权限赋给read用户)

这样,以read用户注册,对数据库拥有了可读操作,给查找问题等带来方便。
 二、数据库一致性检查

a.以informix登录
b.将数据库状态置为off_line
onmode-ky
用onstat-检查数据库状态为off_line
c.将数据库状态置为单用户模式
onmode -s
用onstat-检查数据库状态为quiesent
d.检查数据库保留页状态
oncheck-cr 1>/tmp/oncheck.cr 2>&1
e.检查数据库目录页一致性
oncheck-cc 1 >/tmp/https://www.wendangku.net/doc/af6825476.html, 2>&1
f.检查数据库数据的一致性
oncheck-cD workdb 1>/tmp/oncheck.cd 2>&1
g.检查数据库索引的一致性
oncheck-cI workdb 1>/tmp/oncheck.ci 2>&1
h.检查/tmp下oncheck.cr,https://www.wendangku.net/doc/af6825476.html,,oncheck.cd,oncheck.ci文件,查看有无错误信息,如没有,则数据库状态正常,反之亦然。
i.将数据库状态置为online

onmode-m

用onstat-检查数据库状态为online

三、数据库的备份与恢复

1.dbexport备份与dbexport恢复

dbexport备份是一文体文件备份,该备份将数据库中信息以文本文件方式保存,要注意的是,在备份时必须保证没有对数据库有访问者,否则做dbexport不会成功,dbexport备份的一般格式为(以数据库workdb为例)
dbexport workdb-d -s workdbs /path

2.dbimport恢复是将用dbexport备份的文件恢复到数据库中

a.停止一切数据库操作→删除数据库;
b.$dbimport workdb-d workdbs -i/path;
c.用工具onmonitor将参数TAPEDEV改为/dev/null;
d.onta

p -s -u workdb.
e.检查workdb是否改为U状态.
f.将TAPEDEV值改回原先的值.
 需要指出的是在dbimport恢复过程中,有大量的信息要写在逻辑日志文件中,采用上述方式,可避免写逻辑日志文件,加快dbimport的速度。

3.数据库的零级备份

数据库零级备份是重要的备份手段,日常一般用磁带备份,经常用于做重大操作之前的备份,数据往往需要恢复,而磁带上的零级备份数据由于数据量大,恢复起来花费时间较长,因此,可采用在硬盘上做零级备份的办法。

a.在硬盘上划一个足够大的空间,用于备份文件的存放。

b.用onmonitor将参数TAPEDEV改定指向零级备份文件。

如把/cs2000在作为零级备份文件oback的存放空间,可将参数改为TAPEDEV=/cs2000/oback,这样可做硬盘零级备份,备份恢复时间只是磁带机的1/6。在恢复过程中应该用tail -f online.log监控。恢复过程,一直到数据库状态变为online..

c.将参数TAPEDEV=/cs2000/oback改为TAREDEV=/dev/rmt/0m;

四、数据库常见故障处理

检查:用onstat_-1检查逻辑日志的使用情况,是否中止进程,根据finder col.数据库故障的一般检查,首先要检查数据库状态,经常用onstat_de查找可能出现的错误,同时检查online.log是否报错。

2.数据库表的跟踪:遇到在对数据库表作大规模操作时,有时我们不知道对该表的操作是否得以在继续进行,因为isql进入,操作该表,数据库报“该表已被锁”信息,这时可用查询语句:

首先:set retrieved to drity read

然后:select count(*)from abc,

通过不断对abc表进入统计,如统计数在不断增加,则对该表的操作仍在进行,否则,以停止了对该表的操作。还有,当批量执行SQL命令,如update,……insert等时如不能成功执行,可采用增加判断条件,缩小范围的方法去执行,往往可以获得成功,遇有些语句涉及的记录在处理过程中被锁定,直到处理过程结束可能超过系统关于同时锁定界限,遇这种错误,可以在开始处理时锁定该表。
 3.故障排除举例:

故障现象:在银行批量结息向结息数据表插入记录时出现informix sqlcode错误号为-239。

故障检查:经查,从现象看,似乎有重复记录插入表中,但经核查数据,可以肯定数据绝无重复记录,考虑到表文件长期使用,表文件的相关信息受到某种破坏,为此,做以下操作:

a.unload to “/tmp/abc.txt”select*from abc.卸出abc中全部数据;

b.drop table abc.(删除表文件abc);

c.create tabk abc

(abc_swo mteger;
abc_ano smallint)


);建立数据库表

文件abc.

d.load form“tmp/abc.txt”insert into abc.

(将原数据装入表文件abc中)。

e.重新执行结息操作,新产生的结息数据顺利装入表文件abc中,故障得以排除。

作为计算机技术人员,熟悉数据库的操作,掌握一些操作技巧和方法对于我们解决工作中遇到的问题,查找错误,是十分有帮助的。

Sql Server 2005 数据库维护计划

发表日期:2007-6-2



-
这个星期开始为了减轻工作压力开始使用数据库维护计划(SQL Server Maintenance Plan Wizard)维护数据库,由于以前都没用过,在个人使用的免费版(ExPRess)里也没有这个功能,所以现在好好学习了一番,这里总结一下。

维护计划向导可以用于帮助您设置核心维护任务,从而确保数据库执行良好,做到定期备份数据库以防系统出现故障,对数据库实施不一致性检查。维护计划向导可创建一个或多个 SQL Server 代理作业,代理作业将按照计划的间隔自动执行这些维护任务。它使您可以执行各种数据库管理任务,包括备份、运行数据库完整性检查、或以指定的间隔更新数据库统计信息。创建数据库维护计划可以让SQL Server有效地自动维护数据库,保持数据库运行在最佳状态,并为管理员节省了宝贵的时间。

以下是可以安排为自动运行的一些维护任务:

用新填充因子重新生成索引来重新组织数据和索引页上的数据。这确保了数据库页中包含的数据量和可用空间的平均分布,还使得以后能够更快地增长。

通过删除空数据库页压缩数据文件。

更新索引统计信息,确保查询优化器含有关于表中数据值分布的最新信息。这使得查询优化器能够更好地确定 访问数据的最佳方法,因为可以获得数据库中存储数据的详细信息。虽然 SQL Server 会定期自动更新索引统 计信息,但是此选项可以对统计信息立即进行强制更新。

对数据库内的数据和数据页执行内部一致性检查,确保系统或软件故障没有损坏数据。

备份数据库和事务日志文件。数据库和日志备份可以保留一段指定时间。这使您可以为备份创建一份历史记录 ,以便在需要将数据库还原到早于上一次数据库备份的时间的时候使用。还可以执行差异备份。

运行 SQL Server 代理作业。这可以用来创建可执行各种操作的作业以及运行这些作业的维护计划。
维护任务生成的结果可以作为报表写入文本文件,或写入 msdb 中的 sysmaintplan_log 和 sysmaintplan_log_detail 维护计划表。若要在日志文件查看器中查看结果,请右键单击“维护计划”,再单 击“查看历史记录”。

以下是详细说明:

Check Database Integrity(检查数据库完整

性)
任务检查指定数据库中所有对象 的分配和结构完整性。此任务可以检查单个数据库或多个数据库,您还可以选择是否也检查数据库索引,检查所有索引页以及表数据页的完整性。
此任务封装 DBCC CHECKDB 语句 。
生成的代码:
--检查当前数据库,取消信息性消息
DBCC CHECKDB WITH NO_INFOMSGS

Shrink Database(收缩数据库任务)
收缩数据库’任务”对话框可以创建一 个任务,尝试减小所选数据库的大小。
此任务封装了 DBCC SHRINKDATABASE 命令。
选项:
Shrink database when it grows beyond
当数据库大小超过指定值时收缩数据库,指定引发此任务的数据库大小(MB)。
Amount of free space to remain after shrink
收缩后保留的 可用空间,当数据库文件中的可用空间达到此值时停止收缩。
Retain freed space in database files
选择在数据库文件中保留所释放的文件空间。如果指定 NOTRUNCATE 选项,数据文件好像没有收缩。
Return freed space to Operating system
选择把数据文件中任何未使用空间被释放给操作系统。无需移动任何数据即可减小文件大小。

生成的代码:
--选择Retain freed space in database files
DBCC SHRINKDATABASE (N'AdventureWorks', 10, NOTRUNCATE)
--选择Return freed space to operating system
DBCC SHRINKDATABASE(N'AdventureWorks', 10, TRUNCATEONLY)

Reorganize Index(重新组织索引)
重新组织 SQL Server 数据库表和视图中的索引。 通过使用“重新组织索引”任务,包可以重新组织单个数据库或多个数据库中的索引。如果此任务仅重新组织单个数据库中的索引,则可以选择任务要重新组织其索引的视图或表。“重新组织索引”任务还包含压缩大型对象数据的选项。大型对象数据是具有 image 、text、ntext、varchar(max)、nvarchar(max)、varbinary(max) 或 xml 数据类型的数据。
此任务封装了 Transact-SQL ALTER INDEX 语句。
如果选择压缩大型对象数据,则该语句使用 REORGANIZE WITH(LOB_COMPACTION = ON) 子句,否则 LOB_COMPACTION 将设置为 OFF。
生成代码:(只选择了Employee表)
--选择compact large objects
ALTER INDEX [PK_Employee_EmployeeID] ON [HumanResources].[Employee] REORGANIZE WITH ( LOB_COMPACTION = ON )
--不选择
ALTER INDEX [PK_Employee_EmployeeID] ON [HumanResources].[Employee] REORGANIZE WITH ( LOB_COMPACTION = OFF )

Rebuild Index(重新生成索引)
重新生成 SQL Server 数据库表和视图中的索引。包可 以重新生成单个数据库或多个数据库中的索引。如果任务仅重新生成单个数据库中的索引,则可以选择任务要 重新生成其索引的视图和表。使用默认可用空间重新组织页删除数据库中表上的索引,并使用在创建索引时指 定的填充因子重新创建索引。
此任务封装 ALTER INDEX REBUILD 语句并提供下列索引重新生

成选项:
Reorganize pages with the default amount of free space
指定 FILLFACTOR 百 分比或使用原始的 FILLFACTOR 量。
Change free space per page percentage to:
填充索引使用 PAD_INDEX 选项可以在索引创建过程中设置中间级页中的可用空间百分比。将每页的可用空间百分比更改,删除数据库中表上的索引,并使用新的、自动计算的填充因子重新创建索引,从而在索引页上保留指定的可用空间。
Sort results in tempdb
使用 SORT_IN_TEMPDB 选项,该选项确定在索引创建 过程中生成的中间排序结果的临时存储位置。使用索引的IGNORE_DUP_KEY 选项,该选项指定对唯一聚集或非聚集索引上多行 INSERT 事务中的重复键值的错误响应 。
Keep index online while reindexing
使用 ONLINE 选项,用户可以在索引操作期间访问基础表或聚集索引数据以及任何关联的非聚集索引。
生成代码:(只选择了Employee表)
ALTER INDEX [PK_Employee_EmployeeID] ON [HumanResources]. [Employee] REBUILD WITH ( FILLFACTOR = 90, PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, SORT_IN_TEMPDB = OFF, ONLINE = OFF )

Updata Statics(更新统计信息)
为指定的表或索引视图中的一个或多个统计信息组( 集合)更新键值分布信息。
此任务封装 UPDATE STATISTICS 语句。
All existing statistics
如果更新应用于所有统计信息,则暗示使用 WITH ALL 子句。
Column statistics only
如果更新仅 应用于列,则包含 WITH COLUMN 子句。
Index statistics only
如果更新仅应用于索引,则包含 WITH INDEX 子句。
Full scan
全部统计
Sample by
从每个索引所对应的表中抽样的数据,此样本的大小取决 于表中的行数和数据修改的频率。
生成代码:(只选择了Employee表)
UPDATE STATISTICS [HumanResources].[Employee]
WITH FULLSCAN

Clean Up History(清除历史记录)
使用“清除历史记录”对话框,可以放 弃 msdb 数据库表中旧的历史信息。此任务支持对备份和还原历史记录、Microsoft SQL Server 代理作业历史记录和维护计划历史记录进行删除。
此任务封装 sp_delete_backuphistory 系统存储过程并将指定日期作为参数传递给该过程。
选项:
Backup and restore history
Sql Server Agent job history
Maintenance plan history

生成代码:
declare @dt datetime select @dt = cast(N'2007-05-31T08:00:00' as datetime)
exec msdb.dbo.sp_delete_backuphistory @dt
GO
EXEC msdb.dbo.sp_purge_jobhistory @oldest_date=@dt
GO
EXECUTE msdb..sp_maintplan_delete_log null,null,@dt
GO

Execute Sql Server Agent Job(执行 SQL Server 代理作业)
任务运行 SQL Server 代理作业。SQL Server 代理作业能够自动执行您需要重复执行的任务。
此任务封装 sp_start_job 系统 过程并把 SQL Server 代理作业的名称作为参数传递给该过程。


Back Up Database Task
备份用的,太熟悉了,不介绍了。

Maintenance Cleanup Task
此任务封装 master.dbo.xp_delete_file 系统过程,用来删除备份文件。

Execute T-SQL Statement Task
执行T-SQL 任务运行Transact-SQL 语句。这个任务用向导的时候是没有的,要到设计视图里面去拖出来。

Notify Operator Task
通知操作员任务将通知消息发送到 SQL Server 代理操作员。此任务是唯一一个不封装 Transact-SQL 语句或 DBCC 命令的数据库维护任务。

执行维护计划最好按一定的顺序,首先是执行检查数据库完整性,然后是收缩数据库,重新生成索引或者重新组织索引任务,最后是更新统计信息。

重新生成索引或者重新组织索引要根据情况选择不同的操作,两个一起选择没有什么意义。决定使用哪种碎片整理方法的第一步是分析索引以确定碎片程度。使用系统函数 sys.dm_db_index_physical_stats 可以检测特定索引、表或索引视图的所有索引、一个数据库中的所有索引或所有数据库中的所有索引中的碎片。知道碎片程度后,可以确定修复碎片的最佳方法。索引碎片不太多时,可以重新组织索引。不过,如果索引碎片非常多,重新生成索引则可以获得更好的结果。

我们公司这些任务都是一个星期运行一次,几个数据库加起来有200G,数据库也不算很大,每次运行要两个小时以上,所以都是在凌晨进行。如果进行的是重新生成索引那么在执行的时候表是无法访问的,现在也没什么更好的解决方案。这个问题还在继续学习中!


资料引用:https://www.wendangku.net/doc/af6825476.html,/345212.html

数据库基础知识 浏览次数:2474次悬赏分:200 | 解决时间:2009-7-11 21:34 | 提问者:匿名
设有关图书馆的关系模式如下,分别为:

学生 STUDENT (SID, NAME, DEPT)
书籍 BOOK (BID, TITLE, AUTHOR, PUBLISHER, PRICE)
借书 LEND (SID, BID, LDATE)
还书 RETURN (SID, BID, RDATE)

属性含义分别为: SID 学号, NAME 姓名, DEPT 所在系, BID 图书编号, TITLE 书名, AUTHOR 作者, PUBLISHER 出版社, PRICE 价格, LDATE 借书日期, RDATE 还书日期

1.用关系代数表达式写出查询:
a.借过清华大学出版社出版的<<数据库原理>>的学生姓名;
b.续借过书的学生学号(续借的程序是: 在RETURN 表中先登记还书,再在LEAD 表中登记借书,还书日期与借书日期相同)
c.价格最高的书名


2.用SQL 语言实现下列操作:
a.每个人最多借5本
b.查询该图书馆中哪个作者的书最多
c.删除所有外语学院的同学的借还书信息
d.创建一张图书预定表,需要记录哪个同学要借哪本书,以及预定的时间.注意学生应该是STUDENT表中的有的学生,书也应是BOOK表中有的书.
e.用两种方法实现只借过一次书的学生学号.

3.基于关系代数的

查询和优化
查询2008年1月期间借书的学生姓名和书名
a.以笛卡儿积为基础表达查询
b.对该语法进行优化, 画出优化后的语法树.

请给出参考答案,谢谢。
最佳答案 1)
select https://www.wendangku.net/doc/af6825476.html, from book as a ,student as b where a.title like '数据库原

理';
2)
select a.sid form student as a, lend as b,return as c where (b.sid =

a.sid or c.sid = a.sid )and ldate = rdate;
3)
select distinct (t.title)书名,(select(max(a.price) from book as a)价格

from book as t

求数据库基础知识 浏览次数:63311次悬赏分:0 | 解决时间:2006-4-14 12:42 | 提问者:595555809
最佳答案 第一章 数据库基础知识
本章以概念为主,主要是了解数据库的基本概念,数据库技术的发展,数据模型,重点是关系型数据。

第一节:信息,数据与数据处理

一、 信息与数据:
1、 信息:是现实世界事物的存在方式或运动状态的反映。或认为,信息是一种已经被加工为特定形式的数据。
信息的主要特征是:信息的传递需要物质载体,信息的获取和传递要消费能量;信息可以感知;信息可以存储、压缩、加工、传递、共享、扩散、再生和增值
2、 数据:数据是信息的载体和具体表现形式,信息不随着数据形式的变化而变化。数据有文字、数字、图形、声音等表现形式。
3、 数据与信息的关系:一般情况下将数据与信息作为一个概念而不加区分。
二、 数据处理与数据管理技术:
1、 数据处理:数据处理是对各种形式的数据进行收集、存储、加工和传输等活动的总称。
2、 数据管理:数据收集、分类、组织、编码、存储、检索、传输和维护等环节是数据处理的基本操作,称为数据管理。数据管理是数据处理的核心问题。
3、 数据库技术所研究的问题不是如何科学的进行数据管理。
4、 数据管理技术的三个阶段:人工管理,文件管理和数据库系统。

第二节:数据库技术的发展

一、 数据库的发展:数据库的发展经历了三个阶段:
1、 层次型和网状型:
代表产品是1969年IBM公司研制的层次模型数据库管理系统IMS。
2、 关系型数据型库:
目前大部分数据库采用的是关系型数据库。1970年IBM公司的研究员E.F.Codd提出了关系模型。其代表产品为sysem R和Inges。
3、 第三代数据库将为更加丰富的数据模型和更强大的数据管理功能为特征,以提供传统数据库系统难以支持的新应用。它必须支持面向对象,具有开放性,能够在多个平台上使用。
二、 数据库技术的发展趋势:
1、 面向对象的方法和技术对数据库发展的影响:
数据库研究人员借鉴和吸收了面向对旬的方法和技术,提出了面向对象数据模型。
2、 数据

库技术与多学科技术的有机组合:
3、 面向专门应用领域的数据库技术
三、 数据库系统的组成:
数据库系统(DBS)是一个采用数据库技术,具有管理数据库功能,由硬件、软件、数据库及各类人员组成的计算机系统。
1、 数据库(DB):
数据库是以一定的组织方式存放于计算机外存储器中相互关联的数据集合,它是数据库系统的核心和管理对象,其数据是集成的、共享的以及冗余最小的。
2、 数据库管理系统(DBMS):
数据库管理系统是维护和管理数据库的软件,是数据库与用户之间的界面。作为数据库的核心软件,提供建立、操作、维护数据库的命令和方法。
3、 应用程序:
对数据库中数据进行各种处理的程序,由用户编写。
4、 计算机软件:
5、 计算机硬件:
包括CPU、内存、磁盘等。要求有足够大的内存来存放操作系统、数据库管理系统的核心模块以及数据库缓冲;足够大的磁盘能够直接存取和备份数据;比较主的通道能力;支持联网,实现数据共享。
6、 各类人员。
四、 数据库系统的特点:
1、 数据共享:
2、 面向全组织的数据结构化:
数据不再从属于一个特定应用,而是按照某种模型组织成为一个结构化的整。它描述数据要身的特性,也描述数据与数据之间的种种联系。
3、 数据独立性:
4、 可控数据冗余度:
5、 统一数据控制功能:
数据安全性控制:指采取一定的安全保密措施确保数据库中的数据不被非法用户存取而造成数据的泄密和破坏;
数据完整性控制:是指数据的正确性、有效性与相容性。
并发控制:多个用户对数据进行存取时,采取必要的措施进行数据保护;
数据恢复:系统能进行应急处理,把数据恢复到正确状态。

第三节:数据模型

一、 数据组织:
关系型数据库中的数据层次如下:
1、 数据项(field):又称字段,用于描述实体的一个属性,是数据库的基本单位。一般用属性名作项名;
2、 记录(Record):又称为结点,由若干个数据项组成,用于描述一个对象;
3、 文件(File):由若干个记录组成;
4、 数据库(Data Base):由逻辑相关的文件组成。
二、 数据模型:
数据的组织形式称为数据模型,它决定 数据(主要是结点)之间联系的表达方式。主要包括层次型、网状型、关系型和面向对象型四种。层次型和网状型是早期的数据模型,又称为格式化数据系统数模型。
以上四种模型决定了四种类型的数据库:层次数据库系统,网状数据库系统,关系型数据库系统以及面向对象数据库系统。
目前微机上使用的主要是关系型数据库。
1、 层次型:是以记录为结点的有向

树;图如教材P7图1--2
2、 网状型:树的集合,它的表示能力以及精巧怀强于层次型,但独立性下降。
3、 关系型:
在关系型中,数据被组织成若干张二维表,每张表称为一个关系。
一张表格中的一列称为一个“属性”,相当于记录中的一个数据项(或称为字段),属性的取值范围称为域。
表格中的一行称为一个“元组”,相当于记录值。
可用一个或若干个属性集合的值标识这些元组,称为“关键字”。
每一行对应的属性值叫做一个分量。
表格的框架相当于记录型,一个表格数据相当于一个同质文件。所有关系由关系的框架和若干元组构成,或者说关系是一张二维表。
关系型的特点:描述的一致性;可直接表示多对多关系;关系必须是规范化的;关系模型建立在数学概念基础上。
4、 面向对象型:主要采用对象和灯的概念。

第四节:关系型数据库

一、 关系型数据库的发展:
1、 数据库产品种类繁多:像dBASE,FoxBASE,Clipper,Paradox,Acess等。
2、 采用SQL语言:SQL(Structured Query Language)“结构化查询语言”,是通用的关系型数据库操作语言,可以查询、定义、操纵和控制数据库。它是一种非过程化语言。
3、 支持面向对象的程序设计:
4、 提供良好的图形界面和窗口;
5、 支持开放的客户机/服务器和分布式处理;
6、 提供新一代的数据库管理系统开发工具:支持GUI(图形界面)、ODBC(开放数据库连接)、OLE(对象的链接与嵌入)、DLL(动态链接)等。
二、 关系型数据库管理系统(RDBMS)及其产品:
主要著名的关系型数据库产品有Oracle、Sybase、Informix、DB2、Inges、Paradox、Access、SQL Server等。数据库应用系统开发工具是PowerBuilder和Delphi。

一、 简单查询

简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等。
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。

SELECT nickname,email
FROM testtable
WHERE name='张三'

(一) 选择列表

选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。

1、选择所有列

例如,下面语句显示testtable表中所有列的数据:

SELECT *
FROM testtable

2、选择部分列并指定它们的显示次序

查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。
例如:

SELECT nickname,email
FROM testtable

3、更改列标题

在选择列表中,可重新指定列标

题。定义格式为:
列标题=列名
列名 列标题
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题:

SELECT 昵称=nickname,电子邮件=email
FROM testtable

4、删除重复行

SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。

5、限制返回的行数

使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。
例如:

SELECT TOP 2 *
FROM testtable
SELECT TOP 20 PERCENT *
FROM testtable

(二)FROM子句

FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,它们之间用逗号分隔。
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定:

SELECT username,citytable.cityid
FROM usertable,citytable
WHERE usertable.cityid=citytable.cityid

在FROM子句中可用以下两种格式为表或视图指定别名:
表名 as 别名
表名 别名

(二) FROM子句

FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,它们之间用逗号分隔。
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定:

SELECT username,citytable.cityid
FROM usertable,citytable
WHERE usertable.cityid=citytable.cityid

在FROM子句中可用以下两种格式为表或视图指定别名:
表名 as 别名
表名 别名
例如上面语句可用表的别名格式表示为:

SELECT username,b.cityid
FROM usertable a,citytable b
WHERE a.cityid=b.cityid

SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。

例如:

SELECT a.au_fname+a.au_lname
FROM authors a,titleauthor ta
(SELECT title_id,title
FROM titles
WHERE ytd_sales>10000
) AS t
WHERE a.au_id=ta.au_id
AND ta.title_id=t.title_id

此例中,将SELECT返回的结果

集合给予一别名t,然后再从中检索数据。


(三) 使用WHERE子句设置查询条件

WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据:

SELECT *
FROM usertable
WHERE age>20

WHERE子句可包括各种条件运算符:
比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!<
范围运算符(表达式值是否在指定的范围):BETWEEN…AND…
NOT BETWEEN…AND…
列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……)
NOT IN (项1,项2……)
模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE
空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL
逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR

1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30
2、列表运算符例:country IN ('Germany','China')
3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、varchar、text、ntext、datetime和smalldatetime等类型查询。
可使用以下通配字符:
百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。
下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
例如:
限制以Publishing结尾,使用LIKE '%Publishing'
限制以A开头:LIKE '[A]%'
限制以A开头外:LIKE '[^A]%'

4、空值判断符例WHERE age IS NULL

5、逻辑运算符:优先级为NOT、AND、OR

(四)查询结果排序

使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为:
ORDER BY {column_name [ASC|DESC]} [,…n]
其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排
序。
例如:

SELECT *
FROM usertable
ORDER BY age desc,userid ASC

另外,可以根据表达式进行排序。

二、 联合查询

UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联合查询。UNION的语法格式为:

select_statement
UNION [ALL] selectstatement
[UNION [ALL] selectstatement][…n]

其中selectstatement为待联合的SELECT查询语句。

ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一行



联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。

在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类型,系统将低精度的数据类型转换为高精度的数据类型。

在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:

查询1 UNION (查询2 UNION 查询3)
三、连接查询

通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。

在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行查询。

连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。

SQL-92标准所定义的FROM子句的连接语法格式为:

FROM join_table join_type join_table
[ON (join_condition)]

其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接。

join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。

交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

 

 连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。

无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接连接。例如:

SELECT p1.pub_id,p2.pub_id,p1.pr_info
FROM pub_info AS p1 INNER JOIN pub_info AS p2
ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)

(一)内连接
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:
1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。
2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。
3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:

SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state):
SELECT a.*,p.pub_id,p.pub_name,p.country
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city

(二)外连接
内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。如下面使用左外连接将论坛内容和作者信息连接起来:

SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b
ON https://www.wendangku.net/doc/af6825476.html,ername=https://www.wendangku.net/doc/af6825476.html,ername

下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市:

SELECT a.*,b.*
FROM city as a FULL OUTER JOIN user as b
ON https://www.wendangku.net/doc/af6825476.html,ername=https://www.wendangku.net/doc/af6825476.html,ername

(三)交叉连接
交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等于6*8=48行。

SELECT type,pub_name
FROM titles CROSS JOIN publishers
ORDER BY type
[Post=0][/Post]

6.2 数据库系统基础知识


https://www.wendangku.net/doc/af6825476.html, 2006-04-27 11:22:29 来源: 清华大学出版社 网友评论1 条 论坛
 

在这一节里,我们主要介绍数据库系统的产生、历史和发展趋势等知识。希望大家能够通过这些介绍对数据库系统有一个基本的了解和认识。

6.2.1 数据库简介

1. 数据库的产生

数据库是计算机应用系统中的一种专门用于管理数据资源的系统。

数据有多种形式,如文字、数码、符号、图形、图像以及声音等。数据是所有计算机系统所要处理的对象。

人们所熟知的一种处理数据的办法是制作文件,即将数据处理过程编成程序文件,将所涉及的数据按程序要求组织成数据文件,用程序文件来调用。数据文件与程序文件保持着一定的对应关系。在计算机应用迅速发展的情况下,这种文件式处理方法便显出不足。比如,数据通用性差,不便于移植,在不同文件中存储大量重复信息,浪费存储空间,而且更新不便。

数据库系统便能解决上述问题。数据库系统不从具体的应用程序出发,而是立足于数据本身的管理。它将所有数据保存在数据库中,进行科学的组织,并借助于数据库管理系统,以它为中介,与各种应用程序或应用系统建立接口,使用户能方便地使用数据库中的数据。就好像医院中的药房一样,面向所有科室,不论哪个科开的药都可到药房去拿药,药品的进出、更新、保存均由药房来执行。

有了数据库系统,所有应用程序都可以通过访问数据库的办法来使用所需的数据,实现数据资源的共享。数据库管理系统负责各种数据的维护、管理工作,如大批数据的更新、保存、交流等,数据的查询、检索等操作也变得十分容易。

2. 数据库的特点

一个数据库系统(Database System)通常由3部分组成:

· DB(数据库) 是按照某种规范格式存放在一起的相关数据的集合。简言之,数据库是集中存放的大批数据文件。

· DBMS(数据库管理系统) 是操纵和管理数据库的大型软件,是用户的个别应用与整个数据库之间的接口。当用户向数据库发出访问请求后,DBMS接受,分析该用户的请求,并根据用户请求去操纵(查询、存储、更新)数据库中的有关数据。

· 用户应用程序 指用户根据自身的需要,利用DBMS提供的相关命令编制的一组实用程序。例如在一个饭店管理的数据库系统中,可能会存在着多个用户应用程序,包括预订房间、客人登记、订购机票等。

严格地说,数据库系统是一个实际可运行的为存储、维护和应用系统提供数据的软件系统,是存储介质、处理对象和管理系统的集合体。它通常由软件、数据库和数据管理员组成。其软件

主要包括操作系统、各种宿主语言、实用程序以及数据库管理系统。数据库是依照某种数据模型组织起来并存放在二级存储器中的数据集合。这些数据为多个应用程序服务,独立于具体的应用程序。

数据库由数据库管理系统统一管理,数据的插入、修改和检索均要通过数据库管理系统进行。数据库管理系统是一种系统软件,它的主要功能是维护数据库并有效地访问数据库中任意部分数据。对数据库的维护包括保持数据的完整性、一致性和安全性。数据管理员负责创建、监控和维护整个数据库,使数据能被任何有权使用的人有效使用。

通常意义下,数据库系统具有以下特点:

(1)数据独立性

也就是数据能独立于应用程序之外,我们修改数据不需修改相应的应用程序,这也是数据库系统的一个重要目标。

(2)数据安全性

能防止无关人员得到他不应该知道的数据,这是由用户自己负责的。

(3)数据完整性

指数据的正确性、客观性和真实性。因为破坏数据完整性的因素很多,所以应尽可能减少这类情况的发生。

(4)数据一致性

指同一事物的数据,不管出现在何时何处都是一致的。

(5)数据共享

是数据库系统的主要功能特色之一。它指多个应用程序可以使用同一数据文件;多个用户可存取同一数据;可对社会开放,成为社会的一种信息资源。

(6)控制冗余

它对于节省空间和减少开销及防止数据不一致有重要的作用。

(7)集中管理

指不仅对文件的结构、数据的装入和文件的各种操作要集中管理,而且对文件的内容,数据的类型、长度、大小等都要检查。

(8)并发控制

因数据库系统实现了多个用户共享数据,所以就可能在同一时刻有多个用户存取同一个数据,这时就需要对这种并发操作进行控制。

(9)故障恢复

当数据库系统运行时出现故障,如何尽快将它恢复正常,就是数据库系统的故障恢复功能。

一般来说,我们平时所说的数据库系统是指Database Management System(数据库管理系统),而不是指某个具体的数据库。本章以下各小节均遵循这个约定。6.2.2 数据库系统的历史和发展趋势

1. 数据库系统的历史

第一批商用数据库系统出现在20世纪70年代后期,由文件系统演变而来。这个时期的DBMS主要应用在那些数据中包含很多很小的数据项并且需要许多查询和更新的场合,比如飞机订票系统、银行系统、公司记录等。这些早期的数据模型和系统具有一个很明显的不足,即不支持高级语言的查询。

自1970年Ted Codd发表有关关系数据库系统的论文以来,数据库系统发生了显著的变

化。在关系数据库系统中,系统是用一种称为“关系”的表来组织数据的。而在数据库底层,数据结构可能很复杂(用以保证快速查询)。但是这个时候,用户已不用关心数据的存储结构,查询能够用高级语言实现。从而大大提高了数据库开发人员的工作效率。

2. 数据库系统的发展趋势

随着计算机软硬件技术的逐渐成熟和网络技术的迅猛发展,数据库系统的发展呈现如下的6大趋势:

(1)新的B to B应用,如供应链管理、前沿办公自动化和在线采购等都将由数据库驱动。下一代理想的数据库,可以提供优化的反应速度、存储用户自定义数据的能力和以用户自定义方式完成搜索的特性。这也正是对象关系技术成为因特网基础结构的关键。

(2)因特网上的内容日渐丰富且更具交互性,数据库要能够实现个性化站点的动态发布。

(3)对于数据库系统的可靠性和可扩展性的需求比以往更加迫切和重要。这主要是由于Web上的数据量爆炸性增长,企业站点不能允许宕机出现。

(4)大量非PC网络接入设备,如机顶盒、手持设备开始广泛应用,商家和客户逐渐转向分布式应用。新一代数据库系统应该包含纯JAVA对象关系型数据库。客户可以利用数据库创建全面集成的分布式解决方案,提高本地设备性能,简化系统管理并确保数据完整性。

(5)随着越来越多的企业寻找利用其数据获得竞争优势的途径,商务智能应用蓄势待发。数据库产品供应商要能够建造全面的商务智能基础结构,以提供实时反馈、个性化以及来自多个不同数据源数据的离线深层分析。

(6)企业对于可提供集成电子商务和商务智能的模块化定制解决方案的需求逐渐增加,以实现更快配置并获取竞争优势。客户希望自己的Web站点在3个月或更短时间建立并运行,而不是花费1~2年时间从头开始建造一个复杂的站点。

6.2.3 数据库管理系统

数据库管理系统是用于描述、管理和维护数据库的程序系统,是数据库系统的核心组成部分。它建立在操作系统的基础上,对数据库进行统一的管理和控制。其主要功能有:

(1)描述数据库 描述数据库的逻辑结构、存储结构、语义信息和保密要求等。

(2)管理数据库 控制整个数据库系统的运行,控制用户的并发性访问,检验数据的安全、保密与完整性,执行数据检索、插入、删除、修改等操作。

(3)维护数据库 控制数据库初始数据的装入,记录工作日志,监视数据库性能,修改更新数据库,重新组织数据库,恢复出现故障的数据库。

(4)数据通信 组织数据的传输。

DBMS主要有4种类型:文件管理系统、层次数据

库系统、网状数据库系统和关系数据库系统。因为目前关系数据库系统应用最为广泛,所以我们重点对关系数据库系统中的几个概念进行介绍。

· 关系数据库(Relational Database) 一个关系数据库是由若干表组成的。在Delphi中,数据库概念对应到物理文件上是有一些不同的。对于dBASE,FoxPro,Paradox这3种数据库系统,数据库对应于某一个子目录,而其他类型如MS Access、Btrieve则是指某个文件。这是因为前者的表为单独的文件,而后者的表是聚集在一个数据库文件中的。

· 表(Table) 一个表就是一组相关的数据按行排列,像一张表格一样。比如一个班所有学生的期末考试成绩,存在一个表中,每一行对应一名学生,在这一行中,包括学生的学号、姓名以及各门课程的成绩。

· 字段(Field) 在表中,每一列称为一个字段。每一个字段都有相应的描述信息,如数据类型、数据宽度等。

· 记录(Record) 在表中,每一行称为一条记录。

· 索引(Index) 为了加快访问数据库的速度,许多数据库都使用索引。

6.2.4 数据库应用程序

DBMS中存储了大量的数据信息,其目的是为用户提供数据信息服务,而数据库应用程序正是与DBMS进行通信,并访问DBMS中的数据,它是DBMS实现其对外提供数据信息服务这一目的的惟一途径。简单地说,数据库应用程序是一个允许用户插入、修改、删除并报告数据库中的数据的计算机程序。数据库应用程序在传统上是由程序员用一种或多种通用或专用的程序设计语言编写的,但是近年来出现了多种面向用户的数据库应用程序开发工具,这些工具可以简化使用DBMS的过程,并且不需要专门编程。Delphi就是一种强有力的数据库应用程序开发工具。

用来生成数据库应用程序的语言主要分为以下3大类型:

1. 过程化语言

标准的计算机程序设计语言如Pascal、Basic和C都是过程化语言,这些语言可以通过某种API(应用程序接口)来创建数据库应用程序,这种API由一组标准的函数(或调用)组成,这些函数和调用扩展了语言的功能,使之能访问数据库中的数据。当程序设计人员用过程化语言创建数据库应用程序时,必须把应用的代码编写成一系列的过程,每个过程执行应用的某一部分的工作,如一个过程查询数据库,而另一过程更新数据库中的数据,然后不同的过程通过其他的用户界面过程(例如菜单系统)联系在一起,并且在应用中的适当地方运行。

上述这些过程化语言一般用来创建非数据库应用程序,它们通常被称为3GL(第三代语言)。还有一些过程化程序设计语言是某种特定的DBMS专用的,这些语言一般被称为4GL

(第四代语言),即数据库专用语言。常见的数据库专用的过程化语言有dBASE语言、Paradox数据库的PAL语言等。

2. SQL语言

SQL(Structure Query Language,结构化查询语言)是基于关系模型的数据库查询语言,它是一种非过程化的程序语言,也就是说,没有必要写出将如何做某事情,只需写出做什么就可以了。写出的语句可看作是一个问题,称为Query(查询),针对这个查询,得到所需的查询结果。

下面是一个例子:

Select Name,Total from Class where Total>700

这个查询意为从数据库表Class中将Total(总分)大于700的所有人选出来,并列出他们的Name(姓名)和Total(总分)。

把SQL描述为子语言更适当一些,因为它没有任何屏幕处理或用户输入/输出的能力。它的主要目的是提供访问数据库的标准方法,而不管数据库应用程序的其余部分是用什么语言编写的。它既是为数据库的交互式查询而设计的(因此被称为动态SQL),同时也可在过程化语言编写的数据库应用程序中使用(因此被称为嵌入式SQL)。

3. 其他语言

用于开发数据库应用程序的语言中,还可以使用目前最常见的OOP(面向对象程序设计)语言,如C++,Object Pascal等。OOP代表了一种完全不同的程序设计方法,在这种程序设计方法中,活动被定义为在“对象”上发生的操作,而不是作为一系列过程来定义的。在数据库应用程序中使用OOP语言的情况正在不断增加。

开发数据库应用程序使用的另一种语言是“宏”语言。宏语言不是一种完全的程序设计语言,它实际上是一个用户手工输入的表。这个表被输入到应用程序中,以便自动执行一定的任务。对于某个特定应用的高级语言,宏语言通常可以在低档DBMS软件中或数据库服务器的前端中找到。

最后,还有一种QBE(Query-By-Example,范例查询)语言。严格地讲QBE不是一种语言,它是面向用户提供了一个或多个空表的界面,这些空表对应于数据库中的表。用户可以通过键盘选择需要查询的列,并在适当的列中填入条件从而定义查询的检索条件,然后DBMS就把QBE转换成相应的动作,以完成用户要求的查询任务。

相关文档