SQL Server数据库程序设计知识总结

上一篇 / 下一篇  2012-09-03 14:00:52 / 个人分类:数据库

51Testing软件测试网*AkL(U xWm

  SQLServer是由Microsoft开发和推广的关系数据库管理系统(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的,并于1988年推出了第一个OS/2版本。它只是众多关系数据库管理系统的一种,其它的关系数据库管理系统还有Server,Oracle,DB/2,Sybase,Informix;关系数据库:Access,FoxPro,Dbase等。如今,数据库已经变成学习软件开发的核心课程之一,几乎绝大部分软件都涉及到数据库,很多数据必须存在数据库中。所以为了更好的掌握和操作数据库,对数据库知识的封装就显得尤为重要。51Testing软件测试网A`{&h/[ Q

51Testing软件测试网*s-XzRbI

  ● 关系和非关系数据库51Testing软件测试网/c9?n3s ey%AXt7? @

51Testing软件测试网-qK Byrcg

   关系数据库是创建在关系模型基础上的数据库,由一个或多个二维关系数据表组成,通过建立表之间的关系来定义数据库的结构。在关系数据库中最重要的是数据 表,数据表把相关联的数据按行和列排列到一起来描述一个实物。一个二维表称为一个关系,每一个关系又可以包含多个属性。

.E3\\0{UvJV)q0

1D @4h8nc;Q4Lsu4r"R0  和关系型数据库相比,非关系型数据库特别适合以SNS为代表web2.0应用,这些应用需要极高速的并发读写操作,而对数值一致性要求却不甚高。关系数据库为了维护事务的一致性付出了重大代价导致了其读写能力下降,随着 现在网络SNS的应用对并发读写能力要求极高,关系型数据库已经无法应付,因此,必须用新的一种数据结构化存储来来代替关系数据库。关系数据库的另一个特 点就是其具有固定的表结构,因此,其扩展性极差,而在SNS中,系统的升级,功能的增加,往往意味着数据结构巨大改动,这一点关系型数据库也难以应付,需 要新的结构化数据存储。于是,非关系数据库(NoSQL)应运而生。非关系数据库通常没有固定的表结构,严格上说不是一种数据库,应该是一种数据结构化存 储方法的集合。51Testing软件测试网x.l$R+Uo}

f6~X"f3ab&hg d0  ● SQL Server数据库基础51Testing软件测试网 [!jtd1Be-?d

g1Bp.~u0C`0m0  首先我们从图中看他们之间的联系。

~r)i$x } S1rR@P0

AbT5c X ^gw]0

  一、T-SQL和SQL的比较

d0WY0p}3nH0

  SQL全称为Structured Query Language,是关系数据库的标准语言,它主要包括三种语言:  数据定义语言、数据操纵语言、数据控制语言。T-SQL是SQL语言的增强版。

;j"O ?2gr8UF @J0

   也就是说,SQL三种语言适用于所有关系型数据库,但是它本身具有局限性,因为它只提供了对数据库数据基本的增删改查等命令,在开发拥有复杂结构的数据 库程序时,只有SQL语言是远远不够的,于是各大公司在SQL基础上对它进行了增强。T-SQL是MS和Sybase在 SQL的DDL和 DML基础上,增加了延伸的函数、系统预存程序以及程式设计结构(例如 IF和 WHILE)让程式设计更有弹性。和T-SQL类似的增强版的SQL语言还有Oracle对SQL的扩展PL/SQL。51Testing软件测试网{EFqU6?Q

  二、数据库对象51Testing软件测试网!?\$D(\!j9fB"|ph w'@

  数据库对象定义了数据库内容的结构。它们包含在数据库项目中,数据库项目还可以包含数据生成计划和脚本。 在学习SQL Server时,最快的方法是先学习数据库对象。在研究了它们之间的异同点后,我把数据库对象分为三类。

:q4?V[$LYZ&p0

51Testing软件测试网8S,g-D{Uy

*F7]1r } cR0

6O J"fiI1etS?0

*[o{ ^,T*|oGz0  这三类数据库对象在功能上可能有重叠。

-g5[,O L_051Testing软件测试网qc tH3RW(bE

  1、基于表的对象

&S7a1o Y.o.E CXE.D051Testing软件测试网 }@eH&F}

  表,数据保存在表中。51Testing软件测试网0S|~ F)Cak lm

51Testing软件测试网1j ?)GSx h

  基于表的对象我把它分为三类:

AW3|#l:S+vZ051Testing软件测试网jzYzlfN[j

  视图,用来筛选出用户想要的信息,它是虚拟表,只封装语句,一定程度上保证表中数据的安全;51Testing软件测试网2p"qq4V$TG!Dw

51Testing软件测试网@:E7t(Rh YT

  索引,对数据库表中一个或多个列的值进行排序的结构,提供指针以指向存储在表中指定列的数据值,然后根据指定的排序次序排列这些指针。数据库使用索引的方式与使用书的目录很相似;51Testing软件测试网`uE Od1W"a0T

51Testing软件测试网4AF0m2MqK|$x

  约束、默认值、规则、触发器确保了数据完整性。51Testing软件测试网-|hiz[`.^

51Testing软件测试网Wa8g?+KY!VA b

  2、数据库安全性:用户、角色、权限与数据库安全性中的登陆联合应用可以限制登陆者可进行的操作来保证数据库的安全性。

[0{Z*L Ks051Testing软件测试网 o c cao F5l C Y

  3、块:存储过程和函数有点相似,但是存储过程可以返回Recordset;触发器是一种特殊的存储过程。51Testing软件测试网U*k6oD%U;M n(pY

j/H@voX9a[0  三、DTS数据转换服务51Testing软件测试网HE.qV y

$J"coX!b:E v$K0  DTS的主要作用:1、导入与导出数据51Testing软件测试网WWn A$S

i/X SEg?zl@0  2、转换数据(检验、净化、重整数据)51Testing软件测试网i.XR'J6AbOSl%g

7YI0Fv\n2L)w0  3、转换数据库对象51Testing软件测试网o4Z0{"x/oK;qX

51Testing软件测试网"N"[e$z G0@8~%f`6F

  四、管理和维护

Th%q3? Sw}0

tNdGr{'} } KO0  在这部分中主要是对数据库文件的保护和管理。51Testing软件测试网(m Hn3Z%AS{

Y0AY8l(?4l2C r D0  1、数据库文件

^#iv9e4L i$_\!c0

51Testing软件测试网r R-J%mp%e |,[}

  数据库文件是存放数据库数据和数据库对象的文件。一个数据库可以有一个或多个数据库文件,一个数据库文件只属于一个 数据库。当有多个数据库文件时,有一个文件被定义为主数据库文件,扩展名为.mdf,它用来存储数据库的启动信息和部分或全部数据。一个数据库只能有一个 主数据库文件,其它数据库文件被称为次要数据库文件,扩展名为.ndf,用来存储主文件没存储的其它数据。51Testing软件测试网O ObHw1[O;wr

  多个数据库文件组合到一块就成为文件组。主文件组是由主文件组合成,此文件组是由此文件组合成,但是事务日志文件不属于任何一个文件组。

@ g;r4?iML0

  2、事务和锁51Testing软件测试网#f`C;Y]e?6k-}:[1k

  事务

We%^)@!No,IHQ0

  事务(Transaction)是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性。

*A1mPJ/wc5^ T \+pZ0

J$JI7t'eW$W~0

  事务通常是以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束。51Testing软件测试网 iW!M-B G8^i*F

  COMMIT表示提交,即提交事务的所有操作。具体地说就是将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,事务正常结束。51Testing软件测试网}\W!OyxWDgl6?

  ROLLBACK表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续进行,系统将事务中对数据库的所有以完成的操作全部撤消,回滚到事务开始的状态。51Testing软件测试网2fF0X Lv ?N$PU3}

  锁51Testing软件测试网$b*QiS-M`Dr!L4q

  数据库就是通过锁机制来解决并发问题的。。主要就是两种锁,共享锁和排他锁(也叫独占锁)。51Testing软件测试网M)Lu$Y MJ%^-g

  从程序员的角度看锁分为以下两种类型:51Testing软件测试网k ]pwA M

  乐观锁(Optimistic Lock):乐观锁假定在处理数据时,不需要在应用程序的代码中做任何事情就可以直接在记录上加锁、即完全依靠数据库来管理锁的工作。一般情况下,当执行事务处理时SQL Server会自动对事务处理范围内更新到的表做锁定。51Testing软件测试网4b/TL4j.@-_H

  悲观锁(Pessimistic Lock):悲观锁对数据库系统的自动管理不感冒,需要程序员直接管理数据或对象上的加锁处理,并负责获取、共享和放弃正在使用的数据上的任何锁。

0V"DU$gc kA051Testing软件测试网;z;yO0o9B_R3xu

  ● 应用实例51Testing软件测试网3m R ~5O6Q@

OY&REHn0

Ir#ggN!WeW[7P0

g+bw ZP Br e0/*--下面我们新建一个名为company的数据库,创建三个表priduct、project、tblsales,并在其中创建默认值、规则、触发器、存储过程,并利用用户、角色、权限等确保数据库安全。*/51Testing软件测试网lvemk!BC
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_priduct_project]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)51Testing软件测试网MtK;Q WiZ;j
ALTER TABLE [dbo].[priduct] DROP CONSTRAINT FK_priduct_project51Testing软件测试网1Y;ta} Hu
GO

p.sGL`i@,Q8hu.r0

o n4E,_]0_lR!w0if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[getavgpbiaodi]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
R*`1@q a,ApY ~0drop procedure [dbo].[getavgpbiaodi]51Testing软件测试网@n o v kl{/[
GO

-u|'A|piI9r051Testing软件测试网+EjA#S"} R?%a(\

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[pinfo5000]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)51Testing软件测试网\[x[D%YB
drop procedure [dbo].[pinfo5000]
k%s'A&th.x7s0GO
51Testing软件测试网 z6M)OH,|9K

51Testing软件测试网w byf$JSD2dl

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[pro]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
*x5P]9cyU2T0drop procedure [dbo].[pro]
5}|#|bK1h0GO

+Ka`)s$uD051Testing软件测试网j Z,} H_{2C]:Q

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sysconstraints]') and OBJECTPROPERTY(id, N'IsView') = 1)
J'? dCPF0drop view [dbo].[sysconstraints]51Testing软件测试网*l,c Y1vsmUN
GO
51Testing软件测试网%A/}O @fpx.y0C

51Testing软件测试网@a|:w.h#fP$R

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[priduct]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)51Testing软件测试网 c6M-ysbTPQ
drop table [dbo].[priduct]
v7~gO"u x E0GO

q~F,\.L"mi&_051Testing软件测试网] i$wz ~:U#U5P fs

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[project]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
@+_"[IdC [0drop table [dbo].[project]
E T&]Vw \;k&@0GO
51Testing软件测试网0m\yvX&P)D

xcvRv#^}I&f0if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tblsales]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
Y XpQ$n3HW0drop table [dbo].[tblsales]51Testing软件测试网*G(Ht&Wa
GO
51Testing软件测试网V(mZ-vIW'u h9Y}'p

8DU'Km;\0if exists (select * from dbo.systypes where name = N'tele')51Testing软件测试网 w l Mb_6s\&L
exec sp_droptype N'tele'51Testing软件测试网zMs#kxzy&O7c
GO
51Testing软件测试网F j.rsB@

51Testing软件测试网3S!I2s&T2G'l

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[rule_position]') and OBJECTPROPERTY(id, N'IsRule') = 1)51Testing软件测试网y o}C:A|"U:L8l
drop rule [dbo].[rule_position]
3~_~7o~J9T0GO

,i;Hc%Y#k}051Testing软件测试网.M(@K4y*Cbw#W

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[@position]') and OBJECTPROPERTY(id, N'IsDefault') = 1)
(y/vi-gWv/y&M0drop default [dbo].[@position]51Testing软件测试网9d|5[7^1T8mJ
GO

i5c:S*B4f051Testing软件测试网)qk#H9m*LX%~

create default [@position] as '其它'51Testing软件测试网Y}"]0Z o&};R
GO
U;W)x&_ fB(f7k[0create rule [rule_position] as @postion in('项目经理','秘书','会计','职员','其它')51Testing软件测试网)z(sBk#bms._#r G
GO
M:EP~AG$N0setuser
5q-E0D*tc"c0oq0GO

F(j(Ev U(x0

4b(j A#?Aw0EXEC sp_addtype N'tele', N'smallint', N'not null'51Testing软件测试网 NaGVT;l
GO
51Testing软件测试网FMT4@]

F&K }(@'@ [ j0setuser
&|-_"rg Q&Ueje)V0GO

"R#b8LOD `0

O ?vG F0l0CREATE TABLE [dbo].[priduct] (51Testing软件测试网'Lsn {t&`"h
 [产品ID] [int] NULL ,
jn`a H eyR#]0 [产品名称] [char] (20) COLLATE Chinese_PRC_CI_AS NULL
1M!V,k.W| kYh+p0) ON [PRIMARY]
T?6J9Ql O6U!j]_0GO

X ts p*i5j#L0

c*{[)OSP6c F0CREATE TABLE [dbo].[project] (
J]"s1f$?2c{zw0 [项目编号] [int] NOT NULL ,
%RY(P BN9Q(tpf0 [项目名称] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,51Testing软件测试网-N0a%bl @)O
 [开始日期] [datetime] NULL ,
Z%e!kx-f0 [预计日期] [int] NULL ,
qP]*e1Yd1cc0 [客户编号] [int] NULL ,51Testing软件测试网2I f%A'j T)C?o,WX
 [负责人编号] [int] NULL ,
w,\)KJo,OI0_3}C0 [项目标的] [int] NULL51Testing软件测试网n-vU VF%o
) ON [PRIMARY]
7k){riX4P"P,R|0GO
51Testing软件测试网/l&| u6VaG4n

p,|1SZ @R3B0CREATE TABLE [dbo].[tblsales] (
P S5{9N?U0 [number] [int] NOT NULL ,51Testing软件测试网cs#]yc
 [name] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,51Testing软件测试网 @^q } \;{{*OG
 [sex] [char] (2) COLLATE Chinese_PRC_CI_AS NULL ,
f.fm$A^ |?%W0 [birthday] [datetime] NULL ,51Testing软件测试网 } ^,Z Ki
 [salary] [money] NULL
!k2R6|wvJ'y*sT.N0) ON [PRIMARY]51Testing软件测试网 LG\CD;W7_)XF
GO

*A"W Ry{n R3Q051Testing软件测试网/j2Cd~-Tu-g)}

setuser
B)Im4YEfp0GO
51Testing软件测试网!q$D'~1wPz

5s zJQvQ#F0EXEC sp_bindefault N'[dbo].[@position]', N'[project].[项目标的]'
~e k#BV;n2T2?0GO
51Testing软件测试网i3K3{ |2fk

51Testing软件测试网 Z|1z2Gl#y#u~

EXEC sp_bindrule N'[dbo].[rule_position]', N'[project].[项目名称]'51Testing软件测试网 L3CPtPg
GO

*Rt*lK)bEKX051Testing软件测试网R/^!MQ ~8ip

setuser51Testing软件测试网Xf\` ?8H
GO
51Testing软件测试网#}q/T"TxNy

2}M$\ `%FvR.T;p#f0SET QUOTED_IDENTIFIER ON
@7mM.v d a$Z*gu.T0GO
&_,yO)L8v5E;f0SET ANSI_NULLS ON51Testing软件测试网ax{U)^\+u
GO
51Testing软件测试网 [o:}A }/o&T8wQ%Q

Ur;U9D^&@]#f0--/****** Encrypted object is not transferable, and script. can not be generated. ******/

Z`M+K2mzzu051Testing软件测试网Xn R6h$t

GO51Testing软件测试网.X;uoEO0dz
SET QUOTED_IDENTIFIER OFF51Testing软件测试网 x6[9X8RW"K;I
GO
*{zG?)x}:?*?+T0SET ANSI_NULLS ON51Testing软件测试网.];[#E'Q/G$JM O ?
GO

G.p\)hT(uxQ051Testing软件测试网.Of ^)xM5i8s&uw

SET QUOTED_IDENTIFIER ON
"hQ/})i)}G3Bw4e0GO
s"b-Bb{0SET ANSI_NULLS ON
/P-Km M+|\0GO

`1jC ]ag(B+w051Testing软件测试网,d q'v7p5x0R;SJx

create procedure getavgpbiaodi
rLv3X/K0@name varchar(10),@avgpbiaodi int output
'qi.O-@ A/]4W3nv+`0as51Testing软件测试网Kt+X2e;[Zy
declare @errorsave int51Testing软件测试网/L Yqz~0TD
set @errorsave=0
/n-h-|po;s s.g0select @avgpbiaodi=avg(项目标的)
L|4vjw6E:U#I1Mn0from project as p inner join pmanager as pm on p.负责人ID=pm.负责人ID
L?&PMVm"K3[0where pm.姓名=@name51Testing软件测试网.l/P6V_;NX2V(_K
if(@@error<>0)
V fs;X#D1z0 set @errorsave=@@error
3e.ao1D [*uB0 return @errorsave

{CRwV2lQ?I+e0

"J_t*I{0GO51Testing软件测试网 rY'M$R4q v"FTWG
SET QUOTED_IDENTIFIER OFF51Testing软件测试网4B*q,ayt*A8r-HI
GO
&T-X3tN vR rL O&i0SET ANSI_NULLS ON
oO:J+VV0GO
51Testing软件测试网6h{ Q uR

5S&d1H[!Msre0SET QUOTED_IDENTIFIER ON
Uzroh3t0GO51Testing软件测试网^uhuT$N
SET ANSI_NULLS ON51Testing软件测试网S[-d$Y-d ?(k0o4}
GO
51Testing软件测试网#~ w5A;D O%eb`

4g ^dV,E0create procedure pinfo500051Testing软件测试网7q8` @ V.o*a
as select * from project where 项目标的>=500051Testing软件测试网b+w(I"nkh cq2V
order by 项目标的 desc
51Testing软件测试网(}u#z"F0tZ)a

51Testing软件测试网 \)L n0PCVa

GO
jY$zW.d F9|0SET QUOTED_IDENTIFIER OFF51Testing软件测试网*\.b;W&`7Y
GO51Testing软件测试网 Un#f7E}*W]-X)vSg
SET ANSI_NULLS ON
1X]x2CO$dEig0GO

H7\2WgSR&}b051Testing软件测试网 F6^0V\4N oM#w5t

SET QUOTED_IDENTIFIER ON51Testing软件测试网.]YMNu0{2DlU
GO51Testing软件测试网(v2U%E3gN;T
SET ANSI_NULLS ON
OLZ0rE j@/y0GO
51Testing软件测试网:}2?2G T6vT3p

6zgg5E&p0create procedure pro
3k+N6T,h DW0@n1 int,@n2 int,@n3 int,@avreage int output51Testing软件测试网/_1hGjW+vNx8k/u
as select51Testing软件测试网:_,GC^w/tSd
@avreage=(@n1+@n2+@n3)/3
R1`0tNo%p)p1P0declare @avgscore int
%U?U-lS:`(o8?0exec pro1 1,2,3,@avgscore output51Testing软件测试网+ST0n$k z"Rp2K
select 'The score is:',@avgscore
51Testing软件测试网,Oz2D w3a$^

uu-\4l,f Su0GO51Testing软件测试网4s/w0|K$z7fB/u
SET QUOTED_IDENTIFIER OFF
;Hjd#c%N0GO
Ec_!h\0Ox3Ey1k0SET ANSI_NULLS ON51Testing软件测试网@9x!qG.tFF0c
GO

f'[.L6\JD N YNt{0

!Oh{p7wM0  SQL Server的基础框架知识,我现在只能总结这么多,更多的总结还是在以后一点一滴的学习中。

2lR!yBx5Z0

TAG:

 

评分:0

我来说两句

Open Toolbar