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

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

51Testing软件测试网)Tg7f{7n

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

m.Nb\\A'r:[0  ● 关系和非关系数据库51Testing软件测试网R5~U[qr y6V(_o)j

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

7mC-Tw$t8Ws051Testing软件测试网 d/LY Nu%E:iG5fb,m

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

V3`:D"|^0

S,C3e5fNf0  ● SQL Server数据库基础

0O P"Y,Z_ kk7L4Y051Testing软件测试网x7cp-I D S0E)V\

  首先我们从图中看他们之间的联系。51Testing软件测试网XA5gf4x"K

51Testing软件测试网DW&?(rN)D*f_7P

  一、T-SQL和SQL的比较51Testing软件测试网j9a@O^)X_q&Nu

  SQL全称为Structured Query Language,是关系数据库的标准语言,它主要包括三种语言:  数据定义语言、数据操纵语言、数据控制语言。T-SQL是SQL语言的增强版。51Testing软件测试网!~W I3J)G

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

  二、数据库对象

#}ZhBEh#d0

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

F4a+i Ve4j$Hc0

51Testing软件测试网P3?OF$v2T Q

UP.PA&@6\.j8[0

1F^3Sq-N0

a^8Qc)K1qv{;^k*l0  这三类数据库对象在功能上可能有重叠。

6@ h6W,?$](V051Testing软件测试网rc$SOf8C/x

  1、基于表的对象51Testing软件测试网2|3~V5kh

.PuLBI3e-L0  表,数据保存在表中。51Testing软件测试网BW]-ik.B-a

51Testing软件测试网l2ddq!["s

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

3wTF]5G0i@l051Testing软件测试网S5{,R'H7c/mT9|

  视图,用来筛选出用户想要的信息,它是虚拟表,只封装语句,一定程度上保证表中数据的安全;

-N;b[+B1UTn$?0

T_3B^ T,D+lwm-tQ0  索引,对数据库表中一个或多个列的值进行排序的结构,提供指针以指向存储在表中指定列的数据值,然后根据指定的排序次序排列这些指针。数据库使用索引的方式与使用书的目录很相似;

,`9lCd'L1lvNJ051Testing软件测试网h#`?)VN]

  约束、默认值、规则、触发器确保了数据完整性。

5U4OI,I:\^051Testing软件测试网2c R"?!c[

  2、数据库安全性:用户、角色、权限与数据库安全性中的登陆联合应用可以限制登陆者可进行的操作来保证数据库的安全性。51Testing软件测试网 `b c9UM]}

51Testing软件测试网dCJ j"am

  3、块:存储过程和函数有点相似,但是存储过程可以返回Recordset;触发器是一种特殊的存储过程。51Testing软件测试网z/\ Vy1c0~An

7dviY-}2M0  三、DTS数据转换服务

i?8T ^5P8{)_0

(y`y3`n!O7fFz0  DTS的主要作用:1、导入与导出数据51Testing软件测试网uY/[-}dB8sx

/a;s&U ~8X\-W+q0  2、转换数据(检验、净化、重整数据)51Testing软件测试网C.bC,V+LM3J

s~*q?'EP]5|0  3、转换数据库对象51Testing软件测试网}Q5}[kdI`8o

51Testing软件测试网3z.N] c w9j{

  四、管理和维护

9W_{Q,o t(x0o0

y F&ke/ih?s;R0  在这部分中主要是对数据库文件的保护和管理。

Lp1km)`x4nV*z1L051Testing软件测试网9Ge M8iH*Gr%r

  1、数据库文件51Testing软件测试网T Z,b8A-Tu RY

51Testing软件测试网mU$v!H|1Z5}

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

  多个数据库文件组合到一块就成为文件组。主文件组是由主文件组合成,此文件组是由此文件组合成,但是事务日志文件不属于任何一个文件组。51Testing软件测试网2rt? r;F0iFP%MD

  2、事务和锁

D-C[2g#WL9rJ_6B0

  事务

+EF `w2G$? O6d0

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

51Testing软件测试网2d{ww}$n6KO

  事务通常是以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束。51Testing软件测试网&m1|9IG&\_0d

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

  ROLLBACK表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续进行,系统将事务中对数据库的所有以完成的操作全部撤消,回滚到事务开始的状态。

bb aW{\0

  锁51Testing软件测试网!Kb}:}1Lvs

  数据库就是通过锁机制来解决并发问题的。。主要就是两种锁,共享锁和排他锁(也叫独占锁)。51Testing软件测试网'gd.c.a1CG+gy

  从程序员的角度看锁分为以下两种类型:51Testing软件测试网Ya2q;q;sS9Y"[V

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

]m$gI3FZ]7s%c0

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

51Testing软件测试网I U;ilpHD C

  ● 应用实例

:t2GXo)]:U%J8BI0

fh gQS,d3w3P9g051Testing软件测试网\p^Ur

51Testing软件测试网,Tj4CWr0d

/*--下面我们新建一个名为company的数据库,创建三个表priduct、project、tblsales,并在其中创建默认值、规则、触发器、存储过程,并利用用户、角色、权限等确保数据库安全。*/
J]!Jy7Mqy0if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_priduct_project]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)51Testing软件测试网G8` gW.~I
ALTER TABLE [dbo].[priduct] DROP CONSTRAINT FK_priduct_project
1of;a`+Io0GO

}T@!JA'e051Testing软件测试网;oX/[-I*g8R8Z m

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[getavgpbiaodi]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)51Testing软件测试网G$lh@n8T/F
drop procedure [dbo].[getavgpbiaodi]51Testing软件测试网L+s4m mj/c:S9@K0k'q
GO

6m)[C2Z!D0

Hb9Gvg`NX m CA0if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[pinfo5000]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
-j(E#\~rQG0drop procedure [dbo].[pinfo5000]
VN0A2}m V0GO
51Testing软件测试网 a` sJ$x"f.Yc)f f b

51Testing软件测试网7}0n$xEQSd{

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[pro]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
+yIA8u8WPiB$^5V0drop procedure [dbo].[pro]
C Pi l9_Q N tqL4L0GO

+Fb2P5`z f051Testing软件测试网 I-Fs!K.z\1I0v4q

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sysconstraints]') and OBJECTPROPERTY(id, N'IsView') = 1)
PO&ou)`9M` S{0drop view [dbo].[sysconstraints]
|:\,rX'|Rt"m0GO
51Testing软件测试网Jm}MD"EP

G!@E,s9On0if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[priduct]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
I"c*^p d v*T0drop table [dbo].[priduct]51Testing软件测试网fpo+qc(d;Ld
GO

$t7r+a,y[0

w2LR,MUry|6Xf0if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[project]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
se$c%i(\o;}0drop table [dbo].[project]51Testing软件测试网;X-S7oq$L7F n(]
GO

b#q)qY/v)Vl!@0OB0

`W G1q/A }xFV0if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tblsales]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)51Testing软件测试网vOF9M.n6v1BY&l.m
drop table [dbo].[tblsales]51Testing软件测试网O{M`3pe
GO

6u"X ]+{]3X(h DaJ;q/y0

fZS @JJ[0if exists (select * from dbo.systypes where name = N'tele')51Testing软件测试网eZe}fG%R
exec sp_droptype N'tele'
/W6q]3`$L0GO
51Testing软件测试网6m%yI;\$lI N8K

h"Y^8v&v }%|0if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[rule_position]') and OBJECTPROPERTY(id, N'IsRule') = 1)
s~ i3} n4iE f6E-N0drop rule [dbo].[rule_position]
g#B |&m_Xj0GO

!n)mG[^0

z B So)~5j0if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[@position]') and OBJECTPROPERTY(id, N'IsDefault') = 1)51Testing软件测试网-Y6jK/FPc%y6G
drop default [dbo].[@position]51Testing软件测试网W7p]!w5o|
GO

TeEvHJ0

cS:o#c8pO6o0create default [@position] as '其它'51Testing软件测试网V4p&hJQ\5t1hd^z
GO51Testing软件测试网8{|'\5Lz ? JT*EG j
create rule [rule_position] as @postion in('项目经理','秘书','会计','职员','其它')51Testing软件测试网AGl(V2}&R-Z
GO
)n0ct5xh7\.dE0setuser51Testing软件测试网on.P$P@Hb RxE
GO
51Testing软件测试网[)SN l6lK

;Sx9_6F I sqK5t D0EXEC sp_addtype N'tele', N'smallint', N'not null'
$jS0d9qwU6I0GO
51Testing软件测试网;YTcv({wT P BI5V

#`+i4}:Z/h+b9mq1o0setuser
i.Q&l9gt0K:g u)Kp0GO

I@ l g6f+|4te0

3k\GC`L0CREATE TABLE [dbo].[priduct] (
E}#pyaQo0 [产品ID] [int] NULL ,
8G:@'uC+f'^ax0 [产品名称] [char] (20) COLLATE Chinese_PRC_CI_AS NULL51Testing软件测试网-C;T*ur Q`@}
) ON [PRIMARY]51Testing软件测试网Z FhR5]
GO
51Testing软件测试网mGbD6R?+^

51Testing软件测试网 n1`R]#o

CREATE TABLE [dbo].[project] (
n$i]&pKtJk0 [项目编号] [int] NOT NULL ,
t[n,Ab5_ P0 [项目名称] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
l1j&~L,N4Dy\-D0 [开始日期] [datetime] NULL ,
%U"\M/mz,@5u{0 [预计日期] [int] NULL ,51Testing软件测试网&e|$L|^*c6\
 [客户编号] [int] NULL ,51Testing软件测试网I+V e+z6?l^$jJv
 [负责人编号] [int] NULL ,
"?5oE SB/@ k+t0 [项目标的] [int] NULL51Testing软件测试网5R*gr%io;X
) ON [PRIMARY]51Testing软件测试网hR\Yj"\
GO

Hb8WxM0

2Ze'H{3A)^9n{c0CREATE TABLE [dbo].[tblsales] (51Testing软件测试网I:Z:o\ Q{/_
 [number] [int] NOT NULL ,
a:oz#[3T4G4WT0 [name] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
8p"_1[+Fk Wl0 [sex] [char] (2) COLLATE Chinese_PRC_CI_AS NULL ,51Testing软件测试网 f4[_EKa
 [birthday] [datetime] NULL ,51Testing软件测试网*[\7Ri)A5r
 [salary] [money] NULL51Testing软件测试网'W lc${!K!PWOa
) ON [PRIMARY]
2G }~e%T#M0GO

sT#aynfE|e0

^!Nf G2K|0setuser51Testing软件测试网Xm.l7Z7|;X*a"fH
GO

A,zED1R }!B W9[051Testing软件测试网'R I,k K#~6y0Ma

EXEC sp_bindefault N'[dbo].[@position]', N'[project].[项目标的]'
,v(i9t v,hRx0GO
51Testing软件测试网!rwWeUHt

~s_ Q R0EXEC sp_bindrule N'[dbo].[rule_position]', N'[project].[项目名称]'51Testing软件测试网.n0Y,y]4W$k2sj)y
GO
51Testing软件测试网 R sB3{@:J

x2p i s1tv7f}0setuser51Testing软件测试网6}+b/I6t6B'C^
GO

{PD6J2l/@N2]051Testing软件测试网\;z$E"\"N*l

SET QUOTED_IDENTIFIER ON51Testing软件测试网1YTPR Si
GO
mh3a\A0SET ANSI_NULLS ON51Testing软件测试网1H"]C!KefV
GO
51Testing软件测试网Z`6VR$lmP6c+O

4aA-CFp}0--/****** Encrypted object is not transferable, and script. can not be generated. ******/

GK!xV)G5s8A`0

\9t"`!h C0N0GO
3d"Q|2G[Y ZD)i0SET QUOTED_IDENTIFIER OFF
{%]0xd ce0GO51Testing软件测试网 wjY5pF2^E
SET ANSI_NULLS ON
+}@bz{Vd}0GO

%? \y8@r f0

^+[;sc6\$j|^,i0SET QUOTED_IDENTIFIER ON51Testing软件测试网K u*ve.h_8g
GO51Testing软件测试网F1U.PM(n e6w(w _L
SET ANSI_NULLS ON
-DLp9i4sj:U0GO

@u,l'NTB\2i051Testing软件测试网,D({x$?*[VS_4_

create procedure getavgpbiaodi
o.{'T `B}0@name varchar(10),@avgpbiaodi int output
8{6Ks*f%L5l0as51Testing软件测试网G(_{U]t7~`
declare @errorsave int51Testing软件测试网 Y ^&[-gpfbG
set @errorsave=0
o+iT*}IJ*V t5H jjF0select @avgpbiaodi=avg(项目标的)51Testing软件测试网 w F*H;Bk+Hu
from project as p inner join pmanager as pm on p.负责人ID=pm.负责人ID51Testing软件测试网{J p2s[~`
where pm.姓名=@name
a-U9vZ6h@t)s0if(@@error<>0)
T2P P!bniz jf0 set @errorsave=@@error51Testing软件测试网q l3|i,?J$n{4^:y
 return @errorsave

S4?1k(J]6A%]9BM([.^0

b"t:u5k;i y o0GO
FR ^2Ni W4p^w%}0SET QUOTED_IDENTIFIER OFF51Testing软件测试网 [+? QL{,cYP`S
GO51Testing软件测试网Gz(q`m(W%A
SET ANSI_NULLS ON51Testing软件测试网7xa,U3^_ _|
GO
51Testing软件测试网ls$a9N$w

+H6B.Fq,V0SET QUOTED_IDENTIFIER ON51Testing软件测试网 C GJB n9Gr p3H
GO
B.gc Tw Bf4U0SET ANSI_NULLS ON51Testing软件测试网lA7E4ay6~*ni3o
GO
51Testing软件测试网#n8tjT,[,m"\Sc

k9~ S4c!U0create procedure pinfo500051Testing软件测试网p*P[#CU5c-fqk.q
as select * from project where 项目标的>=500051Testing软件测试网:SJ{,r:W[+T li
order by 项目标的 desc
51Testing软件测试网 \b&Ps%C3F6S1^

.Oh)x1B_e0GO51Testing软件测试网U6a:v(Y2zp3sA'a
SET QUOTED_IDENTIFIER OFF51Testing软件测试网fR BF``^g,d i
GO51Testing软件测试网? O{`/y0PM F.u@
SET ANSI_NULLS ON
X#q;Pq?+l/W,K0GO
51Testing软件测试网wk6d3q9^QJ6T(Kg

"^oK1RW$x/] x*]c0SET QUOTED_IDENTIFIER ON51Testing软件测试网 [y d%DecV
GO51Testing软件测试网)q+tID2g b] J
SET ANSI_NULLS ON
;c+n0?m(S"P0GO
51Testing软件测试网v i@+z8k0Bf4u

51Testing软件测试网9F{3fx+S-[p

create procedure pro
iQ0y@[.l O ]0@n1 int,@n2 int,@n3 int,@avreage int output
%qG`,l'wL0as select
m`d^$R`0@avreage=(@n1+@n2+@n3)/351Testing软件测试网I!O"jtD?v }sZ
declare @avgscore int51Testing软件测试网&N]] E|r]-Q
exec pro1 1,2,3,@avgscore output51Testing软件测试网3}*{G*dm){
select 'The score is:',@avgscore
51Testing软件测试网8UI ~![!b#n_I@ N6x

v}"t(Ppu0GO51Testing软件测试网-}S]&R| x
SET QUOTED_IDENTIFIER OFF
2o4i.O3pE(K,f6G0GO
S,C+G{0e4i?MX0SET ANSI_NULLS ON
/? n-Q TA1d0GO

.dv0s5EC ?OF0
51Testing软件测试网0M ldI8s,h

  SQL Server的基础框架知识,我现在只能总结这么多,更多的总结还是在以后一点一滴的学习中。51Testing软件测试网yll6p&r w4HS9B


TAG:

 

评分:0

我来说两句

Open Toolbar