【网学网提醒】:本文主要为网学会员提供SQL语法总结,希望对需要SQL语法总结网友有所帮助,学习一下!
------------------------管理表------------------------------------
--创建表
createtable表名
(
字段1数据类型identity(标示种子,递增量)primarykey,--添加标识
字段2数据类型
)
--添加一列
altertable表名
add列名tinyint
--添加标识列
altertable表名
add列名intidentity(1001,1)notnull
--删除一列
altertable表名
dropcolumn列名
--修改一列
altertable表名
altercolumn列名intnotnull
--插入数据
insertinto表名or视图(字段1,字段2,字段3,...字段n)
values(值1,值2,值3,...值n)
--修改记录
update表名
set字段1=修改后的值,
字段2=修改后的值
where条件
--删除记录
deletefrom表名
where条件
--删除表
detelefrom表名
truncatetable表名(速度快且使用的系统和事务日志资源少)
-------------------------查询表-----------------------------------------
--查询
通过insertfrom查询,可以将行从一个表复制到另一个表中或在同一个表内复制。
insertinto表名(字段1,字段2,字段3)
select字段1,字段2,字段3from表名
--查询
select列名from表名
--带条件查询
select*from表名where条件and条件
注:字符型或日期型的数据要用单引号引起来
in==or
在使用where子句进行查询时若条件表达式中出现若干条件相同的情况就会使表达式显得冗长不便于用户使用这时可用in关键字来简化
--排序查询
select内容1,内容2,内容3
from表名
orderby内容1asc(升序),内容2desc(降序)
Distinct:从返回的结果数据集合中删除重复的行
selectdistinct列名
from表名
--查询前n名
selecttopn列名1,列名2
from表名
orderby列名1asc
Topnwithties指定返回并列前N条记录
selecttopnwithties列名1,列名2
from表名
orderby列名1asc
--使用like子句进行模糊查询
select字段名from目标表where字段名like条件
%:表示任意字符
_:表示单个任意字符
[]:表示方括号里列出的任意一个字符.
[^]:表示任意一个没有在方括号里列出的字符
----------------------------查看表--------------------------
--查看数据库详细信息
execsp_helpdb数据库名称
--查看表的详细信息
execsp_help表名
sp_helptext查看存储过程的定义
sp_help查看存储过程的有关信息
sp_depends查看存储过程所依据的对象.
-------------------------数据完整性-约束------------------------
1、定义
域(列)完整性:指定对列的一组有效值并决定是否允许有空值。也可以通过在一列中限定数据类型,格式和可能值的范围来强制数据完整性。
defaultInsert时,为列指定值check 指定在列中可接受的值
实体(行)完整性:要求表中所有的行具
有唯一的标识符,例如主关键字值。
primarykey 每行唯一的标识unique 不允许有重复的关键字
参照完整性:确保维持主关键字和外部关键字的关系
foreignkey 匹配另一表中的关键字
约束的概念:
约束是一种强制数据完整性的ANSI标准方法。每种数据完整性类型,使用分别的约束类型来进行强制。
2、约束种类
-----Default约束
功能:执行insert语句时将默认值自动插入约束所在的列
创建表时定义约束:
字段名数据类型default(默认值)
修改表时增加约束:
altertable表名
addconstraint约束名
default(默认值)for字段名
注意事项:
后面创建的默认约束对已经存在的数据没有影响.
每列只能定义一个default约束。
不能用于有Identity属性的列
--------------Check约束
功能:check(检查约束),每次执行Insert/update语句时,该约束要校验数据的合法性。
创建表时定义约束:
字段名数据类型check(条件)
修改表时定义约束:
altertable表名(withnocheck)
addconstraint约束名
check(条件)
withnocheck(参数)只对以后插入的数据起约束作用
注意事项:
后面创建的默认约束对已经存在的数据有影响.但可以用withnocheck避免对以前的数据做检查.
-----使用存储过程创建默认对象
语法:
createdefault默认对象名称as约束表达式
以上语句执行完成后,需要执行下面的存储过程,把
默认对象绑定到指定的列。
绑定:execsp_bindefault默认对象名称,‘表名.绑定的列名’
解除:execsp_unbindefault‘表名.绑定的列名’
优点:可以把创建的默认值绑定到多个字段.
【例】创建一个默认值,并绑定到选课表的成绩列,使默认成绩为’0’.
创建默认值:
createdefaultde_zxfas0
绑定和解除:
execsp_bindefaultde_zxf,’选课.成绩’
execsp_unbindefault‘选课.成绩’
------Rule的使用
功能:指定列中可以接受的值,确保数据落入指定的范围,相当于check约束
语法:
createrule规则名称as条件表达式
以上语句执行完成后,需要执行下面的存储过程,把默
认规则绑定到指定的列。
绑定:execsp_bindrule规则名称,’表名.列名‘
解除:execsp_unbindrule’表名.列名‘
------删除默认和规则
语法:
dropdefault默认名称
droprule规则名称
注意:删除前必须解除所有绑定.
-----Primarykey约束
功能:primarykey(主键约束),一个表中只有能一个pk,不能有空值,不能有重复值.
创建表时定义约束:
字段名数据类型primarykey
修改表时定义约束:
altertable表名
addconstraint约束名
primarykey(字段名)
注意事项:不能在允许为空的
列上创建主键约束
-----Unique约束
功能:unique(唯一约束),指定在同一列中的两行不能有相同的值,只能有一行为空值。
创建表时定义约束:
字段名数据类型unique
修改表时定义约束
altertable表名
addconstraint约束名
unique(字段名)
-----Foreignkey约束
功能:外键约束确保主关键字(主表中)和外关键字(辅表中)的关系。
创建表时定义约束:
字段名数据类型foreignkeyreferences表名(字段名)
修改表时定义约束:
altertable表名1
addconstraint约束名
foreignkey(字段名)references表名2(字段名)
注意:
foreignKey子句中指定的列数和数据类型必须和在references子句中的列数和数据类型匹配。
且关联的表的字段必须设置为主键.
-----级联更新与删除
注意:
设置了外键约束后,如果要插入数据,必须先插入主表数据,再插入外表数据,如果要删除数据,则先删除外表数据,再删除主表数据.
设置级联更新和删除
功能:对主键表中的数据记录进行删除或更新操作时,外键表中的对应记录也跟着删除或更新
语法:
级联删除ondeletecascade
级联更新onupdatecascade
注意:级联更新和级联删除同时存在时,不需用逗号“,”隔开
------删除约束
语法:
altertable表名
dropconstraint约束名
注意:
要删除被约束的列,必须先删除约束
存在外键约束时,要删除主健,必须先删除对应的外键
--------------------汇总和多表连接查询---------------------------
--聚集(合)函数
Avg平均值
count(*):统计表中有多少行
max()/min()最大/最小
Sum()求和
use数据库名
selectavg/max/min/Sum(列名)
from表名
go
--groupby
groupby指定用来放置输出行的组,并且如果SELECT子句
中包含聚合函数,则计算每组的汇总值
select*from表名groupby列名
不能对数据类型为ntext、text、image或bit的字段使用groupby子句。
指定GROUPBY时,选择列表中任一非聚合表达式内的所有列都应包含在GROUPBY列表中,或者GROUPBY表达式必须与选择列表表达式完全匹配。
--groupby…having
使用having子句可对groupby子句选择出来的结果进行再次筛选,最后输出符合having子句中条件的记录
having子句与where子句很类似,其区别在于作用的对象不同,where子句作用于表和视图,having子句作用于组。having子句中还可以包含聚合函数,where不可以
注意事项:
在having子句中,可以引用任何出现在查询列表中的字段。
只能在groupby中使用having子句。
聚合函数条件表达式,只能在having中,不能在where应用
-----连接查询---
连接概述:
如果
一个查询需要对多个表进行操作就称为连接查询,连接查询的结果集或结果表称为表之间的连接。
连接查询实际上是通过各个表之间的共同列的关联性来查询数据
--内连接方式
在where子句指定连接条件对表进行连接.
用表名1innerjoin表名2on连接条件语句进行连接,join指定需要连接的数据表,on指定连接条件(inner可省略)。
select字段1,字段2,……
from表1innerjoin表2on连接条件
例:select*fromxsinnerjoinxkonxs.=xk.
--多表连接
功能:多表连接主要用于两个以上的表之间的查询。
语法:select…from表1join表2on条件1
join表3on条件2
join表4on条件3
--外联接
leftouterjoin
左外连接,结果集中除了包括满足连接条件的行外,还包括左表所有行。
rightouterjoin
右外连接,结果集中除了包括满足连接条件的行外,还包括右表所有行。
fullouterjoin
全外连接,结果集中除了包括满足连接条件的行外,还包括两个表的所有行。
【例】查找所有学生情况及他们选修的课程号,若学生未选修任何课程,也要包括其情况。
selectxs.*,课程号fromxsleftouterjoinxk
onxs.=xk.
--crossjoin交叉连接(乘集)
功能:
交叉连接将从被连接的表中返回所有可能的记录组合(如:一个表8条记录,另一个表9条记录,结果将返回72条记录)。一般用于数据库创建测试数据,或为清单及企业模版创建所有可能的组合数据。
语法:
select字段1,字段2,……
from表1crossjoin表2
crossjoin可以基于两个以上的表,不能带where语句
--内连接和外连接的区别
1).条件:
内连接必满足所有条件;
外连接在满足条件同时,还要满足方向性中的所有行
2).表:
内连接支持多表连接;
外连接只能两个表连接。
--嵌套查询语法规则
如果外部查询的WHERE子句包括某个列名,则该子句必须与子查询选择列表中的该列在联接上兼容。
任何可以使用表达式的地方都可以使用子查询,只要它返回的是单个值
子查询的选择列表中不允许出现ntext、text和image数据类型。
通过比较运算符引入的子查询的选择列表只能包括一个表达式或列名称(分别对SELECT*或列表进行EXISTS和IN操作除外)。
只有同时指定了TOP,才可以指定ORDERBY。
--使用简单比较符的嵌套查询
--带比较符的比较嵌套查询
使用简单比较嵌套查询的比较符有:=、!=(<>)、>、>=、<、<=。把一个表达式的值与子查询的值进行比较,返回比较结果为TRUE的记录
select<目标列>
from表
Where表达式(列名)比较符
(select列from表[where…])
--带[any|all|some]的比较嵌套查询
T—SQL支持3种定量谓词:some,any,all。它们都是判断是否任何或全部返回值都满足搜索要求的。其中some,any只注重是否有返回值满足搜索要求,它们含义相同可替换使用。
select<目标列>
from表
Where表达式(列名)比较符ALL|SOME|ANY(select列from表[where…])
Some和any:表示表达式只要与子查询结果集中的某个值满足比较的关系时,就返回true,否则返回false.
All:指定表达式要与子查询结果集中的每个值都进行比较,当表达式与每个值都满足比较的关系时,才返回true,否则返回false;
--使用IN操作符的嵌套查询
子查询只能返回一个或一列值,当返回一列值时适合用in操作符,表示表达式的值是子查询产生的一系值中的一个就返回TRUE
--使用EXISTS操作符的嵌套查询
EXISTS谓词只注重子查询是否返回行,如果子查询返回,谓词返回为真,否则为假。EXISTS并不真正使用子查询的结果,它仅仅测试子查询是否产生任何结果。
EXISTS谓词子查询的SELECT子句中可包含任何列名,甚至多列,因为它只在乎是否有返回行。
Select<目标列>
From表
Whereexists(select列from表[where…])
--into子句
INTO子句将结果集生成新表
INTO子句的格式为:
[INTOnew_table]
【例】由XS表创建“计算机系学生”表,包括和。
SELECT,
INTO计算机系学生
FROMXS
WHERE专业名='计算机'
--------------------------视图-------------------------------
--定义:
视图是从一个或多个表导出的虚表。对于数据库用户来说,视图似乎是一个真实的表,它具有一组命名的数据列和行。但是,与真实的表不同,在视图中没有存储任何数据,仅仅是一种较简单的访问数据库里其他表中数据的方式,因此称它为“虚表”。视图只能建立在当前正在使用的数据库中。
--视图优点和作用:
1.可以使视图集中数据、简化和定制不同用户对数据库的不同数据要求。
2.使用视图可以屏蔽数据的复杂性,用户不必了解数据库的结构,就可以方便地使用和管理数据,简化数据权限管理和重新组织数据以便输出到其他应用程序中。
3.视图可以使用户只关心他感兴趣的某些特定数据和他们所负责的特定任务,而那些不需要的或者无用的数据则不在视图中显示。
4.视图大大地简化了用户对数据的操作。
5.视图可以让不同的用户以不同的方式看到不同或者相同的数据集。
6.在某些情况下,由于表中数据量太大,因此在表的设计时常将表进行水平或者垂直分割,但表的结构的变化对应用程序产生不
良的影响。
7.视图提供了一个简单而有效的安全机制。
--创建的语法
createview视图名
as
select语句
1.视图创建后,只在数据字典中存放视图的定义,而其中的select语句并不执行。
2.只有当用户对视图进行操作时,才按照视图的定义将数据从基本表中取出。
--查询的语法
select字段from视图名
--修改的语法
alterview视图名
as
T-SQL语句
--向视图中插入数据
Insertinto视图名(字段名…)
Values(字段名…)
注意:如果视图跨越多个表,则不能实现插入
--更新视图的数据
update视图名
select语句
--视图的加密
withencryption表示SQLServer加密包含createview语句文本在内的系统表列。只能加密,不可解密,所以加密前要备份.
createviewv1
withencryption
as
select,fromxs
--查看视图定义
sp_helptext显示规则、默认值、未加密的存储过程、用户定义函数、触发器或视图的文本
execsp_helptext视图名
加密后无法查看视图,所以需要保存源代码
--视图的重命名和删除
execsp_renameold_name,new_name
dropview视图名
-----------------------------------存储过程--------------------------------
--存储过程的概念及优势
存储过程是一组为了完成特定功能的T-SQL语句的集合
允许模块化程序设计。
允许更快执行。
减少网络流量。
可作为安全机制使用。
--存储过程的类型
SQLServer支持以下五种类型的存储过程。
1、系统存储过程(以“sp_”为前缀,存储master里)
2、本地存储过程(存储在用户定义的数据库中)
3、扩展存储过程(以“xp_”为前缀,存储在master里)
4、临时存储过程(名字以#开头)
5、远程存储过程
注意:用户定义存储过程不要以sp/xp开头
--存储过程的执行创建修改查看删除
createprocedure存储过程名
as
SQL语句
EXEC存储过程名
ALTERPROC存储过程名
AS
SQL语句
sp_helptext查看存储过程的定义
sp_help查看存储过程的有关信息
sp_depends查看存储过程所依据的对象.
sp_rename存储过程原名存储过程新名重命名存储过程
DROPprocedure存储过程名
--带参数的存储过程
存储过程可以带一个或多个输入参数,输入参数是指由调用程序向存储过程传递的参数,它们在创建存储过程语句中被定义,在执行存储过程中给出相应的参数值。
--带参数存储过程的创建执行修改查看删除
createprocedure存储过程名
(@参数名数据类型[=默认值][,...n])
AS
SQL语句
使用参数名传递参数值
语法:execute存储过程名[@参数名=参数值][,...n]
例:execp_a@sname=
‘aaa',@pwd='123'
按参数位置传递参数值
语法:EXECUTE存储过程名参数值1,参数值2
例:execp_a‘aaa','123
--带输入参数的存储过程
use库名
createproc存储过程名
(@变量1,数据类型
@变量2,数据类型)
as
select列名1,列名2,列名3
from表名
where列名between@变量1and@变量2
执行:exec存储过程名变量值1,变量值2
--带输出参数的存储过程
如果我们需要从存储过程中返回一个或多个值,可以通过在创建存储过程的语句中定义输出参数来实现,为了使用输出参数,需要在createprocedure语句中使用output关键字
语法:
createprocedure存储过程名
@参数名数据类型[VARYING][=默认值]output[,...n]
as
SQL语句
例:
createproceduremy_p
(
@UserNovarchar(20),
@Pwdvarchar(20)output
)
as
select@Pwd=PwdfromUserswhereUserNo=@UserNo--输出密码
执行:
declare@Pvarchar(20)
execmy_p‘100’,@Poutput
select@p--显示密码
--常用系统存储过程
sp_help对象名
用来查看数据库对象信息
sp_helptext对象名
用来显示存储过程和其它对象的文本
Sp_addtype数据类型名称,类型,空否,
创建用户定义的数据类型。
sp_helpdb数据库名
用来显示数据库相关信息
----流程控制语句------
流程控制语句是指那些用来控制程序执行和流程分支的命令,在SQLServer2000中,流程控制语句主要用来控制SQL语句、语句块或者存储过程的执行流程
--IF...ELSE语句
SQLServer允许嵌套使用IF…ELSE语句,而且嵌套层数没有限制。
语法:
IF逻辑表达式
{语句1或语句块1}
ELSE
{语句2或语句块2}
--BEGIN…END语句
BEGIN…END语句相当于一对括号.
--when…case语句
注意:CASE表达式不是语句,它不能单独执行,而只能作为语句的一部分来使用。
其语法格式如下:
case测试表达式
when测试值1then结果表达式1
when测试值2then结果表达式2
...
else结果表达式n
end
例:根据输入的成绩修改等级列
createprocp_dp
@scvarchar(20)
as
updatexk
setgrade=
case@sc/10
when10then'a'
when9then'b'
else'c'
end
wherescore=@sc
--while语句
while语句用于设置重复执行SQL语句或语句块的条件,只要指定条件为真,就重复执行语句.
while布尔表达式
{SQL语句}
[break]
{SQL语句}
[continue]
break:程序完全跳出循环,结束while语句的执行
continue:程序跳过continue语句后面的语句,回到while循环的第一行命令
例:输出从1开始的10个数
declare@iint
set@i=0
while@i<10
begin
set@i=@i+1
print@i
end
--GOTO语句
GOTO语句是无条件转移语句.GOTO语句可以使程序直接跳到指定
的标有标号的位置处继续执行,而位于GOTO语句和标号之间的程序将不会被执行。GOTO语句和标识符可以用在语句块、批处理和存储过程中,
GOTO标号
--标号可以为数字与字符的组合,但必须以“:”结尾。
用GOTO语句实现循环
Declare@iint
Set@i=0
lp:
If(@i<10)
Begin
Set@i=@i+1
Print@i
Gotolp
end
--return语句
return语句实现无条件终止执行的批处理命令、存储过程或触发器
declare@iint
set@i=0
while@i<10
begin
set@i=@i+1
if@i%3=0
return--终止整个批处理
print@i
end
--使用return返回状态值
例:
createprocp_ret
@sidint
as
if(selectsnamefromxswheresid=@sid)='aaa'
return1
else
return2
执行:
declare@sint
exec@s=p_ret1001--存储过程的值赋给变量
print@s
--用RETURN代替输出参数返回值
例:
Createprocp_out
@snamevarchar(20)
as
return(selectsidfromxswheresname=@sname)
执行:
declare@sint
exec@s=p_out'aaa'
print@s
RETUEN语句还可以返回状态值,即RETURN语句只能返回整数,在存储过程中RETURN不能返回空值,默认返回值是0。也可以用它替换输出参数返回整型值。
--存储过程中return与output区别
共同点:都返回值(但return只能返回int类型)
不同点: 1.return只能返回一个值,而output可以有多个
2.output没有无条件退出的功能
3.return只能返回整型,而output可以是其它类型
--waitfor语句
可以使用waitfor语句延迟或暂停程序的执行。语法格式如下。
waitfor{delay'time'|time'time'}
等多长时间执行
Usenorthwind
waitfordelay'00:00:03'
select*fromProducts
等到什么时候执行
waitfortime'11:47:30'
select*fromProducts
---------------------------------触发器---------------------------------
概念:触发器是一种特殊(通过事件触发而被执行)的存储过程。
主要作用:实现由主键和外键所不能保证的、复杂的参照完整性和数据的一致性。
触发器还有以下功能:
1.可以调用存储过程
2.可以强化数据条件约束
3.跟踪数据库内数据的变化情况,并判断数据变化是否符合数据库要求
4.级联、并行运行
--触发器种类
SQLServer支持两种类型的触发器:AFTER触发器和INSTEADOF触发器。
1.AFTER触发器只在执行某一个操作(insert,update,delete)之后,触发器才被触发。
2.INSTEADOF触发器与AFTER触发器最大的不同之处在于INSTEADOF触发器并不是在执行预定义的操作时被触发,而仅仅是执行触发器本身。
注意:
(1)AFTER触发器只能定义在表这一级上(不能在视图上定义AFTER触发器),但可以为针对表的同一操作定义多个AFTER触发器。
(2)INSTEADOF触发器既可以定义在表上,也可
以定义在视图上。但对于每种操作(inset、update、delete),只能定义一个INSTEADOF触发器
--触发器的优缺点
1、触发器可通过数据库中的相关表实现级联更改。
2、触发器可以强制比用CHECK约束定义的约束更为复杂的约束。
(与CHECK约束不同,触发器可以引用其它表中的列。)
3、触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。
4、一个表中的多个同类触发器能够对同一种数据操作采取多种不同的处理。
缺点:触发器性能通常性能较低。
--inserted和deleted表
SQLServer为每个触发器都创建了两个专用临时表:INSERTED表和DELETED表。
可以使用这两个临时的驻留内存的表测试某些数据修改的效果及设置触发器操作的条件;然而,不能直接对表中的数据进行更改。
当执行INSERT语句时,INSERTED表存放要向表中插入的所有行。
当执行DELETE语句时,DELETED表存放要从表中删除的所有行。
当执行UPDATE语句时,相当于先执行一个DELETE操作,再执行一个INSERT操作。所以旧的行被移动到DELETED表,而新的行插入到INSERTED表。
--创建,修改触发器
create/altertrigger触发器名
on表名
fordelete/insert/update
--DELETE触发器:当创建该触发器的表执行删除操作时,触发该触发器执行其定义的操作.
--UPDATE触发器:当创建该触发器的表执行UPDATE操作时,触发该触发器,执行其定义的操作.
as
触发器要执行的操作
--禁用,启用触发器
Altertable表名
disabletrigger触发器名
Altertable表名
enabletrigger触发器名
--删除触发器
droptrigger触发器名
--事务的概念及特性
事务(Transaction)
所谓事务是指用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。
事务的特性(ACID)
原子性:事务必须是完全成功或完全失败;
一致性:事务必须强制所有数据一致性规则。
隔离性:所有修改数据的事务都必须彼此隔离开来。
永久性:事务所做的更改是永久而稳固的.
--事务控制命令
begintransaction开始事务
committran提交事务--提交事务,操作成功
rollbacktran回滚事务--回滚事务,操作失败
--savetran命令
savetran命令允许在事务中设置保存点,回滚时可以只回滚到保存点,而不用回滚整个事务.
例
begintran
updatexssetsname='hello'wheresid=1001
savetransp--设置保存点
deletefromxswheresid=1001
rollbacktransp--回滚到保存点
--在触发器里应用事务
创建触发器,不允许修改指定的列
Createtriggert_update
Onproducts
Forupdate
as
Ifupdate(price)—判断该列是否被修改
Begin
Prin
t('你没有权限修改单价!')
Rollbacktransaction
end
--------------------------------数据库管理----------------------------------
--备份和恢复需求分析
数据库中的数据丢失或被破坏可能是由于以下原因:
计算机硬件故障、软件故障、病毒、
误操作、自然灾害、盗窃等。
数据库何时被破坏以及遭到怎么样的破坏是不可预测的,所以必须对数据库备份,以便在数据库遭到破坏时能够修复数据库。
--备份和恢复基本概念
备份就是指对SQLSERVER数据库及其它相关信息进行拷贝,数据库备份记录了在进行备份这一操作时数据库中所有数据的状态,以便在数据库遭到破坏时能够及时地将其恢复。
恢复就是把遭受破坏、丢失的数据或出现错误的数据库恢复到原来的正常状态,这一状态是由备份决定的。
备份对象
系统数据库
用户数据库
备份介质:硬盘磁带
--备份角色
固定的服务器角色sys_admin(系统管理员)
固定的数据库角色db_owner(数据库所有者)
固定的数据库角色db_backupoperator(允许进行数据库备份的用户)
--备份类型
完全备份
制作数据库中所有内容的一个副本,包括数据和日志.
差异备份
备份上一次完全备份到当前时间数据所发生的更新.
事务日志备份
上一次日志备份到现有备份的更新量,(使用频率最高)
文件和文件组备份
数据量很大时,只对某一个部分文件或文件组备份
--备份逻辑容器
永久设备(.bak)
也叫命名设备,使用时调用逻辑名.需要先创建
临时设备(.bak)
使用时候调用物理名,使用时创建.
--备份数据库步骤
企业管理器—管理—备份—选定备份设备----右键----备份数据库—添加备份设备—重写/追加
或
企业管理器—数据库—右键—所有任务---备份数据库----添加备份设备—重定/追加
或
企业管理器—工具菜单--向导—管理—备份
--创建永久设备
企业管理器—管理—备份—右键—新建备份设备
命令:
execsp_addumpdevice'disk','a3','d:\1.bak'
--永久设备备份
--完全备份
backupdatabase数据库名to永久设备名
备份日志
backuplog数据库名to永久设备名
[注意:要设置还原模式为“完全”]
选项:--withnoinit追加(不写默认是追加)
--withinit重写
--差异备份
backupdatabase数据库名to永久设备名withdifferential
当数据库内容发生很少的变化时,适合使用差异备份.
格式化设备重写
backupdatabase数据库to永久设备名withformat
--备份到双设备中
图形化:
企业管理器—管理—备份—选定备份设备----右键----备份数据库—添加两个备份设备—shift选定-----重定
/追加
命令:
backupdatabasepubstoa1,a2
--备份到临时设备
backupdatabasepubstodisk='d:\2.bak‘
D:\2.baka是临时创建的备份设备
--备份故障点
backuplog数据库to设备withno_truncate
(使用该选项是为了恢复被破坏的数据库)
备份故障点:即备份最后一次日志
--数据库恢复概念
数据库恢复是指将数据库备份加载到系统中的过程。
在进行数据库恢复时,系统首先进行一些安全性检查,例如指定的数据库是否存在、数据库文件是否有变化、数据库文件是否兼容,然后指定数据库及其相关的文件。之后,针对不同的数据库备份类型,采用不同的数据库恢复方法。
--还原模型
企业管理器--选定数据库—属性—选项—故障还原
完全:针对重要数据库;做日志;还原到脱机点;
简单:不做日志;还原到完全备份状态;
大容量日志:针对大批量动作;做日志;还原到日志备份状态
--还原
企业管理器----数据库----数据库----右键----所有任务------还原数据库
restoredatabasebasefromdisk[withnorecovery]
Withrecovery不能还原差异备份和日志备份,默认
Withnorecovery不恢复数据库.用于继续后面的还原操作.
--还原策略
还原最近的一次完全备份
还原最近的一次差异备份
还原差异备份后所有的日志备份
故障点日志还原
--导入导出概念
导入导出是数据库系统与外部进行数据交换的操作。导入数据是从外部数据源中检索数据,并将数据插入到SQLserver表的过程,即把其他系统的数据引入到SQLserver数据库。导出数据是将SQLserver数据库中的数据转换为某些用户指定格式的过程。
导入导出操作包括了数据传输和数据转换,如在同类系统间进行数据的导入导出,则不必进行数据转换,而在不同系统间进行数据的导入导出时,需要进行数据传输和转换。数据转换包括改变数据格式、重构数据(如把来自多个数据源的数据组合起来)及数据验证等。
--DTS概述
数据转换服务(DTS,DataTransferService)提供了在SQLServer与OLEDB、开放式数据库互连(ODBC)或文本文件格式之间导入、导出和转换数据的功能。
DTS不仅可以把一个服务器上的所有对象和数据转移到另一个服务器上,而且还可以做以下工:
1.可以改变原来数据的格式
2.合并原来多列数据为一列,合并多行数据为一行
3.从非SQLServer数据库传输数据到SQLServer数据库
4.从一个处理器结构到另一个处理器结构
5.提供传输数据的图形化用户界面
--使用DTS导入导出向导
无论是DTS导入还是DTS导出向导,使用的基本步骤是
一致的,具体步骤如下:
1.设置数据源。
导入数据
时,需要选择所要取得数据的外部对象;在导
出数据时,数据源就是本地SQLSERVER
2.设置数据目的。(与设置数据源相反)
3.设置转换格式。(全部复制还是部分复制或先对数据进行处理在存至目的中)
4.保存、调度和复制包。
--导入导出操作
企业管理器---数据库---所有任务---导入/导出的执行包
--------------------------------数据库安全性管理------------------------------
---------------------------------函数-----------------------------------
-------日期和时间函数-------------------
GetDate()获取当前系统时间
DATEDIFF(datepart,startdate,enddate)返回时间差
DATEADD(datepart,number,date)
向指定日期加上一段时间,返回新的datetime值
DATENAME(datepart,date)
返回指定日期的指定日期部分的字符串。
DATEPART(datepart,date):
返回指定日期的指定日期部分的整数。
-------------------------------转换函数-----------------------------------
Cast(源类型表达式as目标类型)
--把日期类型转换为字符类型
selectcast(出生日期aschar(20))from学生
Convert(目标类型,源类型表达式,样式)
selectconvert(char(20),出生日期,1)fromxs
--输出结果:02/10/80
selectconvert(char(20),出生日期,101)fromxs
--输出结果:02/10/1980
样式取值范围:1~21
101~121
------------------------------字符串函数-----------------------------------
--返回字符表达式最左端字符的ASCII代码值。
declare@strchar(10)
set@str='abs'
selectascii(@str)
--将intASCII代码转换为字符的字符串函数。
declare@integerint
set@integer=97
printchar(@integer)
--返回字符串中的字符个数(不包括右边空格)
declare@strchar(10)
set@str='abc'
printlen(@str)
--删除字符串左/右边的空格。
declare@strchar(10)
set@str='abc'
printltrim(@str)--rtrim(@str)
--返回从字符串左/右边开始指定个数的字符。
declare@strchar(10)
set@str='abcdefghijk'
printleft(@str,3)--right(@str,3)
--用字符串3替换字符串1中出现的所有的字符串2.
--replace(‘字符串1’,‘字符串2','字符串3')
declare@strchar(50)
set@str='abcabcabcddddcccaaaabc'
printreplace(@str,'abc','替换')
--返回字符串的小/大写形式
declare@strvarchar(30)
set@str='abcdefghijklmn'
printlower(@str)--upper(@str)
--返回字符串中从start开始的length个字符串。
declare@strvarchar(30)
set@str='abcdefghijklmn'
printsubstring(@str,2,5)
--添加指定个数的空格
declare@strvarchar(30)
set@str='abcdefghijklmn'
set@str=@str+space(5)+'哈哈'
print@str
--将字符串反转
declare@strvarchar(30)
set@str='abcdefghijklmn'
printrev
erse(@str)
--删除指定长度的字符并在指定的起始点插入另一组字符
declare@strchar(20)
set@str='abcefg'
printstuff(@str,2,3,'新字符串')
--返回由数字数据转换来的字符数据
selectstr(123.45,6,2)
--查找字符串中某个特定的字符串第一次出现的位置,如未找到则返回0
declare@strchar(20)
set@str='abcefg'
printpatindex('%b%',@str)
---------------------------用户自定义函数-----------------------------------
自定义函数分为:标量值函数或表值函数
如果RETURNS子句指定一种标量数据类型,则函数为标量值函数。
如果RETURNS子句指定TABLE,则函数为表值函数。
--创建用户自定义函数
CREATEFUNCTION函数名
(参数名数据类型[,…n])
RETURNS数据类型—可以是标量值,或是表值
AS
BEGIN
SQL语句
RETURN返回值
END
标量数据类型包括SQL中所有的数据类型(text、ntext,image和timestamp除外)。
--调用自定义函数
调用自定义函数(用户定义的函数)和调用内置函数方式基本相同,在查询语句中直接引用.
当调用标量值函数时,必须加上“所有者”(dbo),
当调用表值函数时,可以只使用函数名称。
例:调用自定义函数
selectdbo.f_1(1)
--修改自定义函数
ALTERFUNCTION函数名
(参数名数据类型[,…n])
RETURNS数据类型
AS
BEGIN
SQL语句
RETURN返回值
END
--在存储过程里直接调用函数
createprocpp
@aint,@bint
as
select*fromxswheresid=dbo.f_max(@a,@b)
执行:
execpp1,3
--删除自定义函数
DROPFUNCTION函数名
例:
dropfunctionf_1
--返回表的自定义函数
createfunctionf_table()
returnstable
as
return(select*fromxs)
--调用自定义函数
select*fromf_table()
------------------------自定义函数和存储过程的区别------------------------------
存储过程是使用EXEC命令独立调用的,而用户自定义函数是在另一个SQL语句中调用的。
函数必须始终返回一个值(一个标量值或一个表格)。而存储过程可以返回一个标量值、一个表值或无需返回值。