数据库应用基于SQL.docx
《数据库应用基于SQL.docx》由会员分享,可在线阅读,更多相关《数据库应用基于SQL.docx(26页珍藏版)》请在冰点文库上搜索。
数据库应用基于SQL
第四章数据库应用(基于MicrosoftSQLSERVER2000)
◆4.1MicrosoftSQLSERVER2000的安装
安装过程
第一步:
将MicrosoftSQLServer2000安装光盘放入光驱中,安装程序会自动运行出现版本选择界面,我们以选择个人版为例。
如下图:
第二步:
在接下来的界面中选择“安装SQLServer2000组件”选项。
如下图:
第三步:
接着选择“选择安装数据库服务器”。
如下图:
第四步:
稍后才开始出现安装向导,点击“下一步”后出现“计算机名”窗口。
“本地计算机”是默认选项,其名称就显示在上面,我们按其默认点“下一步”。
如下图:
第五步:
接下来,在“安装选择”对话窗口中,同样按其默认项“创建新的SQLServer实例,或安装客户端工具”点下一步。
第六步:
接下来的窗口是用户名、公司名的自取,在经过软件许可协议一步后,到达“安装定义”对话窗口(如下图)。
同样地,按其默认“服务器和客户端工具”选择到下一步。
第七步:
在“实例名”窗口中,系统一般提供了默认的复选框,我们既可以安装默认方式的实例,也可以自定义。
第八步:
在安装类型对话窗口中,可以设定多个选项。
比如安装组件的多少,以及安装的路径等,请根据实际需要选择。
第九步:
在“服务帐户”对话窗口中,一般接受默认的选项。
然后输入你的域的密码即可。
第十步:
在“身份验证模式”窗口里,如果你的操作系统是windowsNT以上,选择“Windows身份验证模式”即可,如果操作系统是windows9X,就建议选择“混合模式”。
并且为此设定访问密码。
第十一步:
一切设定OK后,安装程序开始向硬盘复制必要的文件,开始正式安装。
几分钟后,安装完成。
依次单击“开始”—“程序”,即可看到MicrosoftSQLServer2000的程序组件(如下图)。
图MicrosoftSQLServer2000程序组件
关于MicrosoftSQLServer2000的卸载
可以用程序自带的删除程序以及控制面板两种方式进行。
另外,每个命名的MicrosoftSQLServer2000实例必须单独删除,不能删除SQLServer2000的个别组件。
若要删除组件,必须删除整个实例。
另外,在删除SQLServer2000之前,请退出所有有关的应用程序,包括Windows的事件查看器、注册表编辑器和所有的SQLServer2000应用程序以及所有依赖于SQL的应用程序。
◆4.2MicrosoftSQLSERVER2000的设置
设置方法:
一、将访问数据库服务器设为使用身份验证
通过SQLserver2000自带的企业管理器设置。
1、装完成SQLserver以后,运行企业管理器。
2、编辑服务器的属性。
选择如下
3、设置打开数据库使用身份验证。
如下图设置:
如此设置,在每次打开数据库的时候,都要求必须输入密码,并为下边的操作做铺垫。
二、新建SQLserver2000安全用户,以防止通用账户SA被破解。
1、新建一个数据库登录,增强数据库安全性的首要设置:
添加新的登录,如下图
2、新建登录,如下图,使用SQL身份验证,并设置密码,密码最好复杂一点。
3、设置操作员身份及使用数据库权限,如下图
设置可访问的数据库:
以上是新建数据库登录及数据库服务器登录的安全性验证。
三、关闭SQLserver2000的Windows身份验证。
1、在SQLserver2000企业管理-安全性-登录,如下图:
2、选择windows组身份验证,右键――属性,设置为拒绝访问
四、启动SQLserverAgent服务
通常,在关闭了SQLserver的“Windows组”身份验证时,SQL的代理服务自动备份功能就会停止,如下设置,可在关闭此验证时,又可以启动代理服务,达到安全、备份两不误。
1、打开SQLserver企业管理器,如下图操作
以上是限制了Windows组访问服务器的图示:
在SQLServer2000企业管理器――管理,找到SQLServer代理,点鼠标右键,选择“属性”
2、在“属性”窗口中,选择“连接”,并设置“SQLServer连接”使用SQL身份验证,选择在“安全性|登录”里设置的操作员,建议使用SA用户。
如下图所示
3、配置好“连接”属性以后,在“常规”属性,指定使用“本帐户”
这里的帐户信息为操作系统本机的操作员,“.\sysuser”
例如:
本帐户:
您的电脑名称\administrator密码:
您的administrator用户密码,如下图所示。
4、按以上步骤操作成功后,即可启动SQLServerAgent服务。
五、设置SQLServer2000自动备份数据库
设置自动备份在“管理|数据库维护计划”中新增一个维护计划即可,如下图
按操作操作,指定“数据库备份计划”和“设定数据库备份路径”即可完成备份
1、选择想要设置备份的数据库,然后点下一步,在数据库备份计划时如下图:
2、在“调度”的右下角有一个“更改”按键,更改完后点下一步。
3、选择数据库备份文件的存放位置,和保留数据库备份的时长。
设置完后,点下一步继续到完成设置计划。
◆4.3数据库的创建
企业管理器中数据库的创建流程:
首先,打开SQL的企业管理器,方法是:
开始-->程序-->MicrosoftSQLServer-->企业管理器。
进入企业管理器,逐步展开树形结构,然后按下列方法操作,企业管理器创建数据库方法有两种:
1、使用向导创建数据库
以下图是使用向导创建数据库,用户根据提示操作,即可创建数据库。
二、使用企业管理器创建数据库
(1)在企业管理器中,单击工具栏中的 圆柱形图标,或在数据库文件夹或其下属任一数据库图标上单击右键,选择新建数据库选项,就会出现如下对话框里。
把参数设置好后按确定就完成创建数据库的过程。
◆4.4数据表的设计
使用sqlserver企业管理器创建数据表
创建数据表的步骤如下:
(1)打开企业管理器,在企业管理器中选中一个数据库,例如前面创建的“corporation”数据库,展开“corporation”数据库,单击“表”选项会弹出一个快捷菜单,在快捷菜单中选择“新建表”菜单项,打开如图1所示对话框。
图1创建数据表
(2)在“列名”字段中输入字段名称;在“数据类型”字段选择字段的数据类型;在“长度”字段输入字段长度;如果允许记录的该字段为空,将“允许空”选中。
例如,现在需要建立职员档案表,包括“编号”、“姓名”、“性别”、“出生日期”等信息,“编号”和“性别”是固定长度字符;“姓名”是可变长度的字符串;“出生日期”为日期时间型数据,设置如图2所示。
图2设置表结构
(3)单击工具栏上的按钮,将数据表保存为“职员档案表”。
◆4.5数据表的操作(结构化查询语言SQL的主要语句)
4.5.1Select语句
虽然SELECT语句的完整语法较复杂,但是其主要的子句可归纳如下:
SELECTselect_list
[INTOnew_table_name]
FROMtable_list
[WHEREsearch_conditions]
[GROUPBYgroup_by_list]
[HAVINGsearch_conditions]
[ORDERBYorder_list[ASC|DESC]]
select_list
描述结果集的列。
它是一个逗号分隔的表达式列表。
每个表达式同时定义格式(数据类型和大小)和结果集列的数据来源。
每个选择列表表达式通常是对从中获取数据的源表或视图的列的引用,但也可能是其它表达式,例如常量或Transact-SQL函数。
在选择列表中使用*表达式指定返回源表中的所有列。
INTOnew_table_name
指定使用结果集来创建新表。
new_table_name指定新表的名称。
FROMtable_list
包含从中检索到结果集数据的表的列表。
这些来源可能包括:
∙运行MicrosoftSQLServer的本地服务器中的基表。
∙本地SQLServer中的视图。
SQLServer将一个视图引用内部解析为针对组成视图的基表的多个引用。
∙链接表是可从SQLServer进行访问的OLEDB数据源中的表。
这种访问方式称为分布式查询。
通过将OLEDB数据源链接为链接服务器或者在OPENROWSET或OPENQUERY函数中引用数据源,可实现从SQLServer访问OLEDB数据源。
FROM子句还可包含联接说明,该说明定义了SQLServer用来在表之间进行导航的特定路径。
FROM子句还用在DELETE和UPDATE语句中以定义要修改的表。
WHEREsearch_conditions
WHERE子句是一个筛选,它定义了源表中的行要满足SELECT语句的要求所必须达到的条件。
只有符合条件的行才向结果集提供数据。
不符合条件的行中的数据不会被使用。
WHERE子句还用在DELETE和UPDATE语句中以定义目标表中要修改的行。
GROUPBYgroup_by_list
GROUPBY子句根据group_by_list列中的值将结果集分成组。
例如,NorthwindOrders表在ShipVia中有三个值。
GROUPBYShipVia子句将结果集分成三组,每组对应于ShipVia的一个值。
HAVINGsearch_conditions
HAVING子句是应用于结果集的附加筛选。
逻辑上讲,HAVING子句从中间结果集对行进行筛选,这些中间结果集是用SELECT语句中的FROM、WHERE或GROUPBY子句创建的。
HAVING子句通常与GROUPBY子句一起使用,尽管HAVING子句前面不必有GROUPBY子句。
ORDERBYorder_list[ASC|DESC]
ORDERBY子句定义结果集中的行排列的顺序。
order_list指定组成排序列表的结果集的列。
ASC和DESC关键字用于指定行是按升序还是按降序排序。
ORDERBY之所以重要,是因为关系理论规定除非已经指定ORDERBY,否则不能假设结果集中的行带有任何序列。
如果结果集行的顺序对于SELECT语句来说很重要,那么在该语句中就必须使用ORDERBY子句。
必须按照正确的顺序指定SELECT语句中的子句。
对数据库对象的每个引用都不得引起歧义。
下列情况可能会导致多义性:
∙在系统中,可能有多个对象带有相同的名称。
例如,User1和User2可能都指定了一个名为TableX的表。
若要解析多义性并且指定TableX为User1所有,请至少使用用户ID来限定表的名称:
∙SELECT*
∙FROMUser1.TableX
∙在执行SELECT语句时,对象所驻留的数据库不一定总是当前数据库。
若要确保总是使用正确的对象,则不论当前数据库是如何设置的,均应使用数据库和所有者来限定对象名称:
∙SELECT*
∙FROMNorthwind.dbo.Shippers
∙在FROM子句中所指定的表和视图可能有相同的列名。
外键很可能具有和相关主键相同的列名。
若要解析重复名称之间的多义性,必须使用表或视图名称来限定列名:
∙SELECTDISTINCTCustomers.CustomerID,Customers.CompanyName
∙FROMCustomersJOINOrdersON
∙(Customers.CustomerID=Orders.CustomerID)
∙WHEREOrders.ShippedDate>'May11998'
当必须完全限定表和视图名称本身时,上述语法会变得很烦琐。
通过在FROM子句中使用AS关键字为表指派一个相关名称(也称为范围变量或别名)即可解决此问题。
只能在FROM子句中定义完全合法的表或视图名称。
然后所有其它表或视图引用都可使用此相关名称。
在前一个示例中应用相关名称并且完全限定表,会有如下的SELECT语句:
SELECTDISTINCTCst.CustomerID,Cst.CompanyName
FROMNorthwind.dbo.CustomersASCst
JOIN
Northwind.dbo.OrdersASOrd
ON(Cst.CustomerID=Ord.CustomerID)
WHEREOrd.ShippedDate>'May11998'
4.5.1.1单个数据表的查询
语法:
SELECTselect_list
FROMtable_name
[WHEREsearch_conditions]
[GROUPBYgroup_by_list]
[HAVINGsearch_conditions]
[ORDERBYorder_list[ASC|DESC]]
例句:
SELECT生产编码,分类,品名,规格型号,月存数量,月存金额,单位
FROM原材料月存历史库
WHERE生产编码LIKE'TA00-000%'AND日期='2008/12/25'
ORDERBY生产编码
4.5.1.2多表查询技巧
语法:
SELECTa.list1,b.list1……
FROMtable_name1a,table_name2b
[WHEREa.field=b.field]
[GROUPBYgroup_by_list]
[HAVINGsearch_conditions]
[ORDERBYorder_list[ASC|DESC]]
例句:
SELECTA.订单编号,B.收料日期,B.单据号码
FROM原材料订购合同A,原材料收料单B
WHEREA.订单编号='TA6200909004'ANDA.订单编号=B.订单编号
ORDERBYB.收料日期
4.5.1.3使用外联接(LEFTOUTERJOIN/RIGHTOUTERJOIN/FULLOUTERJOIN)
LEFTOUTERJOIN或LEFTJOIN
语法:
SELECTa.au_fname,a.au_lname,p.pub_name
FROMauthorsaLEFTOUTERJOINpublishersp
ONa.city=p.city
ORDERBYp.pub_nameASC,a.au_lnameASC,a.au_fnameASC
例句:
SELECTA.订单编号,B.收料日期,B.单据号码
FROM原材料订购合同A
LEFTOUTERJOIN
原材料收料单B
ONA.订单编号=B.订单编号WHEREA.订单编号='TA6200909004'
ORDERBYB.收料日期
4.5.2Insert(INSERT/INSERTFROM查询)
使用INSERT添加行,用VALUES子句为一行指定数据值:
INSERTINTOMyTable(PriKey,Description)VALUES(123,'Adescriptionofpart123.')
INSERTFROM查询
通过INSERTFROM查询,可以将行从一个表复制到另一个表中或在同一个表内复制。
例如,在titles表中,可以通过INSERTFROM查询,将有关某个出版商所有书籍的信息都复制到另一个表中,并使该表可由该出版商使用。
INSERTFROM查询类似于生成表查询,不同的是将行复制到现有的表中。
例如,下面的查询将书名信息从titles表复制到一个名为archivetitles的存档表中。
该查询对属于某个出版商的所有书名的四列内容进行复制:
INSERTINTOarchivetitles(title_id,title,type,pub_id)
SELECTtitle_id,title,type,pub_idFROMtitlesWHERE(pub_id='0766')
4.5.3Update(更改数据记录)
使用WHERE子句更改符合条件的数据记录
语法:
UPDATENorthwind.dbo.Shippers
SETCompanyName='UnitedShippers'
WHERECompanyName='UnitedPackages'
例句:
UPDATE原材料订购合同SET单价=8000
WHERE订单编号='TA6200909004'and生产编码='TA00-0001'
4.5.3Delete(删除表中数据记录)
DELETE语句可删除表或视图中的一行或多行。
DELETE语法的简化形式为:
语法:
DELETEtable_or_viewFROMtable_sourcesWHEREsearch_condition
例句:
DELETESuppliersWHERECompanyName='Lyngbysild'
4.5.3CREATE(创建数据库/创建表)
CREATEDATABASE
创建一个新数据库及存储该数据库的文件,或从先前创建的数据库的文件中附加数据库。
语法
CREATEDATABASEdatabase_name
[ON
[[,...n]]
[,[,...n]]
]
[LOGON{[,...n]}]
[COLLATEcollation_name]
[FORLOAD|FORATTACH]
:
:
=
[PRIMARY]
([NAME=logical_file_name,]
FILENAME='os_file_name'
[,SIZE=size]
[,MAXSIZE={max_size|UNLIMITED}]
[,FILEGROWTH=growth_increment])[,...n]
:
:
=
FILEGROUPfilegroup_name[,...n]
例如创建名称为“SL”的数据库:
USEmaster
GO
CREATEDATABASESL
ON
(NAME='SL_Data',
FILENAME='F:
\MicrosoftSQLServer\MSSQL\Data\SL_Data.MDF',
SIZE=2MB,
FILEGROWTH=5%)
LOGON
(NAME='SL_log',
FILENAME='F:
\MicrosoftSQLServer\MSSQL\Data\SL_log.LDF',
SIZE=2MB,
FILEGROWTH=5%)
GO
例如创建数据表“丁酮甲苯库存”:
CREATETABLE[dbo].[丁酮甲苯库存](
[生产编码][char](10)COLLATEChinese_PRC_CI_ASNOTNULL,
[材料分类][char](10)COLLATEChinese_PRC_CI_ASNULL,
[品名][char](10)COLLATEChinese_PRC_CI_ASNULL,
[规格型号][char](40)COLLATEChinese_PRC_CI_ASNULL,
[供应商名称][char](40)COLLATEChinese_PRC_CI_ASNULL,
[上期存数量][numeric](18,5)NULL,
[本期入数量][numeric](18,5)NULL,
[本期出数量][numeric](18,5)NULL,
[本期存数量][numeric](18,5)NULL,
[单位][char]
(2)COLLATEChinese_PRC_CI_ASNULL
)ON[PRIMARY]
GO
CREATECLUSTEREDINDEX[IX_丁酮甲苯库存]ON[dbo].[丁酮甲苯库存]([生产编码])ON[PRIMARY]
GO
4.5.3Drop(删除数据库/删除表)
DROPDATABASE
从MicrosoftSQLServer删除一个或多个数据库。
删除数据库将删除数据库所使用的数据库文件和磁盘文件。
语法
DROPDATABASEdatabase_name[,...n]
A.除去单个数据库:
DROPDATABASEpublishing
B.除去多个数据库:
DROPDATABASEpubs,newpubs
DROPTABLE
删除表定义及该表的所有数据、索引、触发器、约束和权限规范。
任何引用已除去表的视图或存储过程必须通过DROPVIEW或DROPPROCEDURE语句显式除去。
语法
DROPTABLEtable_name
A.除去当前数据库内的表:
DROPTABLEtitles1
B.除去另外一个数据库内的表:
DROPTABLEpubs.dbo.authors2