《数据库高级编程.doc》由会员分享,可在线阅读,更多相关《数据库高级编程.doc(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、SQL Server 系统数据库简介 SQL Server 2000有6个系统数据库 1.Master数据库是SQL Server系统最重要的数据库,它记录了SQL Server系统的所有系统信息。这些系统信息包括所有的登录信息、系统设置信息、SQL Server的初始化信息和其系统数据库及用户数据库的相关信息。 2.Tempdb是一个临时数据库,它为所有的临时表、临时存储过程及其它临时操作提供存储空间。3. Model数据库是所有用户数据库和Tempdb数据库的模板数据库,它含有Master数据库所有系统表的子集,这些系统数据库是每个用户定义数据库需要的。 4. Msdb数据库是代理服务数据
2、库,为其警报、任务调度和记录操作员的操作提供存储空间。 5. Pubs和Northwind数据库是两个实例数据库,它们可以作为SQL Server的学习工具。 服务管理器(Service Manager) SQL Server 服务管理器是在服务器端实际工作时最有用的实用程序。服务管理器用来启动、暂停、继续和停止数据库服务器的实时服务。服务包括:SQL Server、SQL Server Agent、MSDTC(Microsoft Distributed Transaction Coordinator,微软分布式事务协调器)。 企业管理器是Microsoft SQL Server程序组中的程序
3、之一,也是最重要的一个管理工具。企业管理器不仅能够配置系统环境和管理SQL Server,而且由于它能够以层叠列表的形式来显示所有的SQL Server对象,因而所有SQL Server对象的建立与管理都可以通过它来完成。 利用企业管理器可以完成的操作有管理SQL Server 服务器;建立与管理数据库;建立与管理表、视图、存储过程、触发程序、角色、规则、默认值等数据库对象,以及用户定义的数据类型;备份数据库和事务日志、恢复数据库;复制数据库;设置任务调度;设置警报;提供跨服务器的拖放控制操作;管理用户帐户;建立Transact-SQL命令语句以及管理和控制SQL Mail。查询分析器(Que
4、ry Analyzer) 用于输入和执行Transaction-SQL语句,并且迅速查看这些语句的结果,以分析和处理数据库中的数据。这是一个非常实用的工具,对掌握SQL语言,深入理解SQL Server的管理工作有很大帮助数据库存储结构主数据库文件:存放数据,每个数据库有且仅有一个主数据文件,后缀为.mdf。次数据库文件:存放数据,有或没有都可,也可有多个,后缀为.ndf。事务日志文件:存放事务日志,每个数据库必须有一个或多个日志文件,后缀为.ldf 。2.1创建SQL SERVER数据库2.1.1使用企业管理器 一、使用控制面板根结点 创建步骤: 打开企业管理器,打开结点,选择“数据库”结点
5、。(2)在“数据库”节点上点击右键,选择“新建数据库”(3)在弹出的数据库属性窗口中完成主要设置二、使用数据库向导完成2、 关键字和参数说明CREATE DASEBASE datebase_name:新数据库的名称。ON 用于指定数据库所需的数据文件。LOG ON 用于指定数据库的事务日志文件。FOR LOAD:提供与早期SQL Server的兼容性,表示计划将备份直接装入新建的数据库。FOR ATTACH:指定从现有的一组操作系统文件中附加数据库,只有指定16个以上的的项目,才能使用CREATE DATABASE FOR ATTACH。PRIMARY:指定其后定义的第一个文件是主数据文件。N
6、AME=logical_file_name:定义操作系统文件的逻辑文件名,该文件名只在SQL语句中使用,是全局磁盘文件名的代号、( )中的内容表示可以省略的选项或 参数 、 1n表示同样的选项可以重复到1n 遍 、如果某项的内容太多则需要额外说明,则在语法结束后用括起来,如语法中的而该项的真正语法在“:=”后面加以定义说明 、通常会与符号|连用,表示中的选项或参数必须其一,不可省略。 、当与符号|连用时,表示 中的选项任选其一,但也可以不选。例如语法中的FOR LOAD |FOR ATTACH分句,表示可以FORLOAD 或FOR ATTACH,不能两者同时使用,但是整个分句可以省略eg.创建
7、一个名为sales的数据库,数据文件的逻辑文件名为sales_dat,磁盘文件名为sales_dat.mdf,事务日志文件的逻辑文件名为sales_log,磁盘文件名为sales_log.ldf,两个磁盘文件都存储在D盘SQL文件夹下CREATE DATABASE salesON(NAME=sales_dat,FILENAME=d:SQLsales_dat.mdf,SIZE=5,MAXSIZE=30,FILEGROWTH=2)LOG ON(NAME=sales_log,FILENAME=d:SQLsales_log.ldf,SIZE=2MB,MAXSIZE=20MB,FILEGROWTH=2M
8、B)GO2.2 设置数据库选项数据库选项的设置将决定数据库的默认行为,用户数据库的这些设置是在数据库创建时从模型数据中继承过来的。一:在企业管理器中设置 步骤打开“数据库属性”对话框,可以在“选项”标签页进行数据库设置 1、访问区设置 2、故障还原设置 3、设置区 4、兼容性设置二、 在查询分析器中设置1、查看数据库选项:可使用存储过程sp_dboption来查看数据库选项。语法格式: EXEC sp_dboption2、设置数据库选项:在确定了要修改的数据库选项之后,可使用存储过程sp_dboption设置数据库选项。语法格式:sp_dboption dbname=database , op
9、tname = option_name , optvalue = valuedbname= 数据库名称该参数将确定需要修改选项的数据库的名称。optname = 选项名称该参数将确定需要设置的选项的名称。optvalue = 选项值该参数将确定选项的新设置。如果该参数省略,sp_dboption将返回当前值。(True、 False、 ON、 OFF)例:1、将“STUDENT”的数据库选项“AUTO CLOSE”设置为“TRUE”:sp_dboption STUDENT,autoclose, True2、将“STUDENT”的数据库选项“ANSI NULL DEFAULT”设置为“TRUE”
10、:sp_dboption STUDENT ,ansi null default,true2.3修改数据库2.3.1更改数据库名称1、语法 SP_renamedb old_name,new_name2、前提条件:必须将该数据库切换到单用户模式下。3、举例 exec sp_dboption student,single user,true exec sp_renamedb student,学生 exec sp_dboption 学生,single user,false2.3.3 使用企业管理器修改数据库结构选中数据库节点,在弹出的快捷菜单中选择“属性”选项,则弹出“数据库属性”窗口。可以在此窗口的
11、数据文件和日志文件标包括文件组标签页修改数据库ADD FILE ,nTO FILEGROUP filegroup_name:向指定的文件组添加新的数据文件。ADD LOG FILE ,n:将新的日志文件添加到指定的数据库。REMOVE FILE:删除某一操作文件名,只有文件为空时才能删除。ADD FILEGROUP filegroup_name:添加一个文件组。REMOVE FILEGROUP filegroup_name:删除一个文件组。:修改某一操作系统文件的属性,要指明被更改数据文件的逻辑文件名。MODIFY NAME :更改数据文件或日志文件的逻辑名称。例如:MODIFY FILE(N
12、AME= logical_file_name,NEWNAME= new_logical_name)MODIFY FILEGROUP:指定要修改的文件组和所需的改动。例如:给文件组改名,MODIFY FILEGROUP filegroup_name NAME=new_filegroup_name;MODIFY FILEGROUP filegroup_name filegroup_property表示给定文件组属性将用于此文件组。READONLY:指定文件为只读,不允许更新其中的对象,主文件组不能设置为只读。READWRITE:逆转READONLY属性,允许更新其中的对象。DEFAULT:将文件组
13、设置为默认数据库文件组。例1创建一个名字为Temp的数据库,此数据库包含一个数据文件和一个日志文件,其中数据文件的逻辑名为Temp1_dat,磁盘文件名为Temp1_dat.mdf,事务日志文件的逻辑名为Temp1_log,实际文件Temp1_log.ldf,初始大小为5MB,增长上限为15MB,每次增长量为1MB。所有文件均放在D:SERVER 文件夹下。CREATE DATABASE Temp ON(NAME= Temp1_dat, FILENAME=D:serverTemp1_dat.mdf, SIZE=5, MAXSIZE=15,FILEGROWTH=1) LOG ON (NAME=T
14、emp1_log,FILENAME=D:serverTemp1_log.ldf,SIZE=5,MAXSIZE=15,FILEGROWTH=1)例2、为刚刚创建的名为Temp的数据库增加两的数据文件,其中一个数据文件的逻辑名称为Temp2_dat ,磁盘文件名Temp2_dat.ndf,另一个数据文件的文件名为Temp3_dat,磁盘文件名为Temp3_dat.ndf,其中两个数据文件的初始大小都是2MB,最大增长上限都是12MB,每次增长量为2MBALTER DATABASE TempADD FILE (NAME= Temp2_dat, FILENAME=D:serverTemp2_dat.n
15、df, SIZE=2MB, MAXSIZE=12MB, FILEGROWTH=2MB), (NAME= Temp3_dat, FILENAME=D:serverTemp3_dat.ndf , SIZE=2MB, MAXSIZE=12MB, FILEGROWTH=2MB)例3为刚刚创建的名为Temp的数据库增加两个日志文件,其中一个日志文件的文件名为Temp2_log,磁盘文件名Temp2_log.ldf,另一个日志文件的文件名为Temp3_log,磁盘文件名Temp3_log.ldf,两个文件的初始大小都是2MB,最大增长上限都是12MB,每次增长量为2MALTER DATABASE Temp
16、ADD LOG FILE(NAME=Temp2_log, FILENAME=D:serverTemp2_log.ldf, SIZE=2MB, MAXSIZE=12MB, FILEGROWTH=2MB),(NAME=Temp3_log, FILENAME=D:serverTemp3_log.ldf, SIZE=2MB, MAXSIZE=12MB, FILEGROWTH=2MB)例4 将修改后的Temp数据库中的数据文件Temp1_dat的容量增加到10MB,并将其容量长上限增加到12MB,递增量增加到2MB。ALTER DATABASE Temp Modify file ( NAME= Temp
17、1_dat, /*FILENAME=D:serverTemp1_dat.mdf,*/ SIZE=10, MAXSIZE=20, FILEGROWTH=2)修改文件名将Temp数据库中的数据文件Temp2_dat的文件名改为new_dat。alter database temp modify file (name = Temp2_dat, newname=new_dat )例5 删除Temp数据库中一个名为Temp2_dat数据文件和一个名为Temp2_log的事务日志文件ALTER DATABASE Temp REMOVE FILE Temp2_dat -go ALTER DATABASE T
18、emp REMOVE FILE Temp2_log -Go例6为Temp数据库增加一个名为Temp_ Filegroup的 文件组ALTER DATABASE TempADD FILEGROUP Temp_Filegroup例7 向Temp添加两个数据文件temp4_dat和temp5_dat,初始容量为3MB,最大容量为10MB,递增量1MB,并且把着两个数据文件添加到Temp_ Filegroup文件组中然后再把这个文件组设置为默认文件组ALTER DATABASE Temp ADD FILE(NAME= Temp4_dat, FILENAME=D:serverTemp4_dat.ndf,
19、 SIZE=3mb, MAXSIZE=10MB, FILEGROWTH=1MB),(NAME= Temp5_dat, FILENAME=D:serverTemp5_dat.ndf, SIZE=3mb, MAXSIZE=10MB, FILEGROWTH=1MB) TO FILEGROUP Temp_Filegroup GO ALTER DATABASE Temp MODIFY FILEGROUP Temp_Filegroup DEFAULT GO修改文件组名将Temp数据库中的文件组Temp_ Filegroup的改名为new_ filegroupALTER DATABASE Temp MODI
20、FY FILEGROUP Temp_Filegroup name=new_filegroup压缩数据库和数据文件一:使用企业管理器压缩数据库步骤:展开节点找到需要进行压缩的数据库节点-“所有任务”-“收缩数据库” 选择收缩方式 收缩后最大可用空间 在收缩前将数据页移到文 件起始位置 收缩文件 用户可通过调度来设置自动收缩二:利用T-SQL语句对数据库进行压缩例8将Temp数据库中的数据文件Temp1_dat缩小至5MBuse Temp dbcc shrinkfile ( Temp1_dat,5) 2.4 删除数据库一:利用企业管理器删除数据库步骤(省略)注意:一旦将数据库删除,数据库及其所包含
21、的对象将被全部删除,数据库的所有文件和日志文件也会从磁盘上删除。二:使用T-SQL语句删除数据库1、语法:DROP DATABASE database_name ,n说明:系统数据库是无法被删除的例:DROP DATABASE同时删除多个数据库 DROP DATABASE mydb1,mydb2,mydb3移动数据库文件分离数据库:从服务器中移去逻辑数据库,但不删除数据库文件;附加数据库:创建一个新的数据库并使用原有的数据库文件和事务日志文件中的数据。注意:移动数据库文件要先停止SQL Server服务管理器。 第三章 表的创建和管理在SQL SERVER中,每个数据库最多可以存储20亿张表,
22、每张表可以有1024个字段,每行最多存储8060个字节。3.1 SQL Server 2000数据类型 SQL SERVER2000为表中的字段提供了丰富的数据类型,SQL SERVER2000在讨论系统数据类型时提供了长度、精度和小数位数几个概念数据类型:定义每个列所能存放的数据值和存储格式精 度:指数值数据中所存储的十进制数据的总位数。小数位数:指数值数据中小数点右边可以有的数字位数的最大值。长 度:指存储数据所使用的字节数3.1二、使用T-SQL语句创建使用sp_addtype创建用户定义数据类型语法:Sp_addtypetypename=typephystype=system_data
23、_type,nulltype=null_type说明:typename=type:用户定义的数据类型的名称。phystype=system_data_type:系统数据类型,没有默认值。 注意:如果定义的基本数据类型中有空格或标点符号,则必须括起来。(varchar(11)),nulltype=null_type:处理空值的方法。用引号引起来。NULL,NOT NULL。自定义一个地址数据类型exec sp_addtype address, varchar(80), not null利用系统存储过程删除用户自定义数据类型sp_droptypetypename=type删除自定义的生日数据类型。
24、 exec sp_droptype birthdaySQL Server 2000提供了两种方法创建数据库表: 第一种方法是利用企业管理器创建表;另一种方法是利用T-SQL语句创建表。1. 利用企业管理器创建表 步骤:打开企业管理器,在企业管理器中的树状目录窗口中展开需要创建新表的数据库。单击“表”节点,此时该是数据库中的表对象显示在内容窗口中,然后选择下列操作之一打开“表设计窗口” A:在该节点上单击右键,在弹出菜单中选择“新建表”命令。 B:在操作菜单上选择“操作”- 新建表 C:单击工具栏上的“新建”按钮 定义数据表字段表设计窗口由上下两个窗口组成,上面的窗口用来定义表字段的一般属性,下
25、面的窗口用来定义各个字段的特殊属性。特殊属性说明:描述:指定字段的注释文本描述。默认值:指定字段的默认值,插入记录时没有指定字段值的情况下,自动使用的值。精度:指定字段的位数。对于decimal 和numeric数据类型的字段可以设置精度属性。小数据位数:显示该列值小数点右边能出现的最多数字个数。标识:指定一个字段是不否为标识字段。只能bigintint、smallint、 tinyint、deximal、numeric可以设置该属性。 否:不设置该字段为标识字段。是:该字段为标识列,在插入一个新的数据行时不必为字段指定数值,系统会自动生成一个字段值。是(不适用于复制):和第二个选项功能相似,
26、如果是以复制的方式向表中输入数据,系统将不自动生成字段值。标识种子:指定标识字段的初始值。标识递增量:指定标识字段的递增值。默认值为1。公式:指定用于计算字段的公式。排序规则:指定当字段值用于对查询结果进行排序时的排序规则,默认情况下使用数据库默认规则。标识字段在insert数据时不需要输入数据,即不需要出现在insert语句中,如果要强行往该类字段输数据,先要执行:SET IDENTITY_INSERT 表名 ON 数据输入完毕后:SET IDENTITY_INSERT表名 OFF 创建要求的表CREATE TABLE BMQKB ( number char(7) not null prim
27、ary key, name char(10) NOT NULL, sex char(2) default 男 NOT NULL, birthday datetime null, professional_title varchar(10) null, salary money null, memo text null)USE tempdbCREATE TABLE persons( 标识号 int IDENTiTY(1,2), 姓名 varchar(8)USE tempdbCREATE TABLE calculate( 最小值 int, 最大值 int, 平均值 AS (最大值+最小值)/2)关
28、于修改已有列的属性的说明建议表中有记录后,不要轻易修改表的结构,特别是修改列的数据类型。下列类型的列不能被修改:具有text、ntext、image、timestamp数据类型的列;计算列或用计算列中的列;全局标识列;用于索引的列;用于主键约束、外键约束、核查约束、唯一约束的列。例3.4 定义project表,包含:“项目编号”和“项目名称”。修改表,将“项目名称”的数据类型从char(20)更改为varchar(25),再将原来不可以为空更改为可以为空。USE companyAlter table projectAlter column 项目名称 varchar(25) null例3.5 向
29、Project表添加三个字段,分别:“项目负责人”(varchar(15)),“项目难度级别”(int,默认值是1),“预计工期”。其中“预计工期”的取值为“项目难度级别”的值乘以20Alter table project Add 项目负责人 varchar(15) , 项目难度级别 int Default 1, 预计工期 AS 项目难度级别*20例3.6:删除表Project中的“项目负责人”和“项目难度级别”。Alter table Project Drop column 项目负责人,项目难度级别3.3删除表1、删除表时,表的结构定义、表中所有的数据以及表的索引、触发器、约束等均被永久地从
30、数据库中删除。2、如果要删除有过外键约束和唯一约束和主键约束相关的表,必须首先删除具有外键约束的表。(一)利用企业管理器删除表在企业管理器中,展开指定的数据库和表格项,用右键单击要删除的表,从快捷菜单中选择“除去表”选项,则会出现除去对象对话框。单击“全部删除”按钮,即可删除表。(二) 利用DROP TABLE语句删除表DROP TABLE语句可以删除一个表和表中的数据及其与表有关的所有索引、触发器、约束、许可对象。DROP TABLE语句的语法形式如下:DROP TABLE table_name,n例如:删除表ProjectUSE CompanyDROP TABLE Project例3.7向
31、员工数据表(员工姓名,性别,所属部门、工资)插入一条记录(王秋萍,女,项目部,3000)Use companyInsert into 员工数据表 (员工姓名,性别,所属部门,工资) Values(王秋萍,女,项目部,3000)3.4.2修改表中数据1、使用企业管理器修改表中数据方法一:表上右击/打开表/返回所有行方法二:表上右击/打开表/查询/运行钮!2、使用T-SQL语句UPDATE修改表中数据将员工数据表中所有的项目部的员工的工资统一调整为3000Use companyUpdate 员工数据表Set 工资=3000Where 所属部门=项目部将员工数据表中所有的项目部的员工的工资在原来的基
32、础上增加500。Use companyUpdate 员工数据表Set 工资=工资+500Where 所属部门=项目部在员工数据表中将“王秋萍”由项目部调到财务部,工资增加为3500。use companyupdate员工数据表set 所属部门=财务部,工资=3500where 员工姓名=王秋萍删除员工数据表中姓名是“王秋萍”的员工的记录Use companyDelete from 员工数据表Where 员工姓名=王秋萍4.1 变 量作用:在程序设计中变量是用来传递数据的方式之一,它由系统或用户自定义并赋值变量分为: 全局变量,局部变量A: 全局变量作用: SQL使用全局变量来记录SQLSERV
33、ER 服务器的活动状态。是由系统预先定义好的变量,以开头,用户无法对它进行修改或管理,对于用户来讲是只读的。1、ERROR 作用:该全局变量将返回最后执行的T-SQL语句的错误代码,返回值的数据类型整数.输入SQL语句执行成功则返回0,如果不成功,则返回相关错误信息对应的错误号 eg:使用ERROR变量检验SQL语句是否执行成功select sno from students where sname=周杰伦if error = 0print 你的SQL 语句执行成功Eg:使用ERROR全局变量检测在SQL语句中出现的限制冲突假设在数据库STUDENTS表中为BDAY字段建立了CHECK约束(b
34、day1980-1-1and bday2000 Print 共有 + RTRIM(rowcount)+人增长工资B:局部变量在Transact-SQL批处理中用来保存数据值的对象。作用范围:从申明该局部变量的地方开始,到申明局部变量的批处理或存储过程的地方结尾。 如何声明局部变量 使用DECLARE语句来声明T-SQL变量 格式:DECLEAR 变量名称 数据类型Eg:DECLARE V1 char(20),v2 int 可以使用SET和SELECT给变量赋值eg: set v1 =常量/变量表达式eg: select v2 =MAX(mgrade) from students print v
35、2 字符串连接用+号来连接EG:ABC+123=ABC123括号()求反()乘除( 、 )加减( +、 )按位异或()按位与(&)按位或(|)逻辑非(NOT)逻辑与(AND)逻辑或(OR)程序流程控制语句主要用于控制T-SQL语句、语句块和存储过程的执行过程。4.3.1 BEGINEND语句块作用:将多条T-SQL语句组合在一起,组成一个逻辑块,当控制流语句必须执行一个包含一条或两条以上的T-SQL语句的语句块时使用。 注意:相当与很多语言中的 eg:如果学生表中有入学总分大于400分的学生,请输出信息,否则提示用户没有IF exists(select sno from students wh
36、ere mgrade400) BEGIN PRINT下列学生成绩400 select * from students where mgrade400 END ELSE BEGIN PRINT没有总分大于400的学生 ENDEg: 分别输出teachers表中教师姓名和所在的部门,并在部门后面添加部门说明SELECT tname, dept, 部门说明= CASE dept when基础部 then 教基础课程的部门 when经管系 then培养经济管理和行政管理的人才 when计算机系then培养计算机高级技术人才 when国际交流系then培养英语实用人才 else 其他 end from
37、teachersEg: 使用GOTO语句求10的阶乘DECLARE I int,time int select I=1,time=2 label: select I=I*time select time=time+1 if time=10 GOTO Label else select i,time判断teachers表中是否有老师的奖金少于300,如果有,则将所有老师的工资增加500,直到所有老师的奖金都多于300(教师工资的30%是奖金)WHILE EXISTS(SELECT * FROM teachers where pay*0.3300) BEGIN UPDATE teachers se
38、t pay=pay+500 END4.3.6 RETURN语句 作用:无条件终止查询、存储过程或批处理。RETURN后面的语句将不再执行。主要用于存储过程中4.3.7 Waitfor 语句作用:挂起执行连接,直到超过指定的时间间隔或者达到一天中指定的时间。指定时间间隔:Waitfor delay 时间间隔固定时间点: Waitfor time 时间值 eg在执行SELECT语句之前等待两秒Waitfor delay 00:00:02Select sno,snameFrom studentsWhere class=03物流2下例在晚上 10:20 执行指定存储过程 WAITFOR TIME 22
39、:20 EXECUTE update_all_stats4.2 SQL Server函数1、 系统函数可以使用户在不访问系统表的情况下,获取SQL Server系统表中的信息。Col_length 返回列长度EG:返回students表中sname字段的长度Select col_length(students,sname) as 字段长度 From students2、聚合函数作用:用于计算SELECT语句查询行的统计值,通常与GROUP BY语句一起使用,对表分组统计。 字符串函数举例1、SUBSTRING(expression,start,length)从expression的第start
40、个字符处返回length个字符。Print SUBSTRING(DIELDOSPOE,5,3)结果:DOS2、RTRIM(expression)截断字符串中所有尾随空格。返回数据类型为varchar3、STR(float_expr,length,decimal)作用:将一个数值型数据转换为字符串,length为字符串的长度,decimal小数点后的位数 (char)Eg:STR(15.2222,10,6)则结果是:15.!逆操作可采用:CAST ( expression AS data_type )日期和时间函数举例1、GETDATE() 作用:取的当前的日期2、DATEPART(返回的日期部
41、分,日期) 作用:返回日期的指定日期部分的整数。返回类型:int3、DATEDIFF(datepart1,date1,date2)作用:返回两个日期之间的时间间隔DATEDIFF(year,1998-4-18 ,2004-4-9) 最终结果: 64、 DATEADD(datepart,number,date)作用:给指定的日期的某一部分增加值datepart:指定部分 number:增加的整数值 date: 指定的日期PRINT DATEADD(MONTH,-2,2006-6-6)1用户自定义函数CREATE FUNCTION 函数名 (参数名称,数据类型) RETURNS 返回数据类型 BEGIN 函数内容 RETRUN 表示式 ENDEG:定义个用来计算员工奖金的函数,返回员工的奖金(工资的0.3就是奖金)CREATE FUNCTION bonus (salary smallmoney) RETURNS smallmoney BEGIN
限制150内