SQL 笔记.docx

上传人:b****5 文档编号:27753061 上传时间:2023-07-04 格式:DOCX 页数:31 大小:173.58KB
下载 相关 举报
SQL 笔记.docx_第1页
第1页 / 共31页
SQL 笔记.docx_第2页
第2页 / 共31页
SQL 笔记.docx_第3页
第3页 / 共31页
SQL 笔记.docx_第4页
第4页 / 共31页
SQL 笔记.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

SQL 笔记.docx

《SQL 笔记.docx》由会员分享,可在线阅读,更多相关《SQL 笔记.docx(31页珍藏版)》请在冰豆网上搜索。

SQL 笔记.docx

SQL笔记

1.SQLServer的数据类型

1.varchar(n)长度为n个字节的可变长度且非unicode的字符数据。

n必须是一个介于1到8000之间的数值。

存储大小为输入字节的实际长度,而不是n个字节。

2.nvarchar(n)包含n个字节的可变长度的unicode字符数据。

n必须是一个介于1到4000之间的数值。

字节存储大小是所输入字符个数的两倍。

3.什么是Unicode编码:

Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。

它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

4.char(n)固定长度,非Unicode字符数据,长度为n个字节。

n的取值范围为1至8,000,存储大小是n个字节。

CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。

(char的存储速度比varchar快)

5.Money货币数据类型。

用于十进制货币值。

2.通配符

通配符

解释

示例

‘_’

一个字符

ALike'C_'

%

任意长度的字符串

BLike'CO_%'

[]

括号中所指定范围内的一个字符

CLike'9W0[1-2]'

[^]

不在括号中所指定范围内的一个字符

DLike‘%[A-D][^1-2]'

3.插入多行数据

1.insertintoTongxunlu(姓名,地址,电子邮件)

selectsName,sAddress,sEmail

fromStudent

2.selectStudents.SName,Students.SAddress,Students.SEmail

intoTongXunLu

fromStudents

3.selectStudents.SName,Students.SAddress,Students.SEmail,identity(int,1,1)asStudentID

intoTongXunLuEX

fromStudents

4.INSERTSTUDENTS(SName,SGrade,SSex)

SELECT'张可',7,1UNION

SELECT'李扬',4,0UNION

SELECT'杨晓',2,0UNION

SELECT'汤美',3,0UNION

SELECT'苏三东',7,1UNION

SELECT'王立岩',3,1UNION

5.字符串函数

函数名

描述

举例

CHARINDEX

用来寻找一个指定的字符串在另一个字符串中的起始位置

SELECTCHARINDEX('ACCP','MyAccpCourse',1)

返回:

4

LEN

返回传递给它的字符串长度

SELECTLEN('SQLServer课程')

返回:

12

LOWER

把传递给它的字符串转换为小写

SELECTLOWER('SQLServer课程')

返回:

sqlserver课程

UPPER

把传递给它的字符串转换为大写

SELECTUPPER('sqlserver课程')

返回:

SQLSERVER课程

LTRIM

清除字符左边的空格

SELECTLTRIM('周智宇')

返回:

周智宇(后面的空格保留)

RIGHT

从字符串右边返回指定数目的字符

SELECTRIGHT('买卖提.吐尔松',3)

返回:

吐尔松

REPLACE

替换一个字符串中的字符

SELECTREPLACE('莫乐可切.杨可','可','兰')

返回:

莫乐兰切.杨兰

STUFF

在一个字符串中,删除指定长度的字符,并在该位置插入一个新的字符串

SELECTSTUFF('ABCDEFG',2,3,'我的音乐我的世界')

返回:

A我的音乐我的世界EFG

CEILING

返回大于或等于所给数字表达式的最小整数

SELECTCEILING(43.5)

返回:

44

FLOOR

取小于或等于指定表达式的最大整数

SELECTFLOOR(43.5)

返回:

43

Sign

对于正数返回+1,对于负数返回-1,对于0则返回0

SELECTSIGN(-43)

返回:

-1

Sqrt

取浮点表达式的平方根

SELECTSQRT(9)

返回:

3

CONVERT

用来转变数据类型

SELECTCONVERT(VARCHAR(5),12345)

返回:

字符串12345

CURRENT_USER

返回当前用户的名字

SELECTCURRENT_USER

返回:

你登录的用户名

DATALENGTH

返回用于指定表达式的字节数

SELECTDATALENGTH('中国A盟')

返回:

7

HOST_NAME

返回当前用户所登录的计算机名字

SELECTHOST_NAME()

返回:

你所登录的计算机的名字

SYSTEM_USER

返回当前所登录的用户名称

SELECTSYSTEM_USER

返回:

你当前所登录的用户名

7.什么是事务

1.事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作

2.这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行

3.事务是一个不可分割的工作逻辑单元

8.事务必须具备以下四个属性,简称ACID属性:

1.原子性(Atomicity):

事务是一个完整的操作。

事务的各步操作是不可分的(原子的);要么都执行,要么都不执行

2.一致性(Consistency):

当事务完成时,数据必须处于一致状态

3.隔离性(Isolation):

对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务

4.永久性(Durability):

事务完成后,它对数据库的修改被永久保持,事务日志能够保持事务的永久性

9.如何创建事务

1.开始事务:

BEGINTRANSACTION

2.提交事务:

COMMITTRANSACTION

3.回滚(撤销)事务:

ROLLBACKTRANSACTION

……关键语句讲解………

BEGINTRANSACTION

/*--定义变量,用于累计事务执行过程中的错误--*/

DECLARE@errorSumINT

SET@errorSum=0--初始化为0,即无错误

/*--转账:

张三的账户少1000元,李四的账户多1000元*/

UPDATEbankSETcurrentMoney=currentMoney-1000

WHEREcustomerName='张三'

SET@errorSum=@errorSum+@@error

UPDATEbankSETcurrentMoney=currentMoney+1000

WHEREcustomerName='李四'

SET@errorSum=@errorSum+@@error--累计是否有错误

IF@errorSum<>0--如果有错误

BEGIN

print'交易失败,回滚事务'

ROLLBACKTRANSACTION

END

ELSE

BEGIN

print'交易成功,提交事务,写入硬盘,永久的保存'

COMMITTRANSACTION

END

GO

print'查看转账事务后的余额'

SELECT*FROMbank

GO

10.什么是视图

视图是一张虚拟表,它表示一张表的部分数据或多张表的综合数据,其结构和数据是建立在对表的查询基础上

视图的用途

1.筛选表中的行

2.防止未经许可的用户访问敏感数据

3.降低数据库的复杂程度

4.将多个物理数据库抽象为一个逻辑数据库

IFEXISTS(SELECT*FROMsysobjectsWHERE

name='view_stuInfo_stuMarks')--检测是否存在

DROPVIEWview_stuInfo_stuMarks--删除视图

GO

CREATEVIEWview_stuInfo_stuMarks--创建视图

AS

SELECT姓名=stuName,学号=stuInfo.stuNo,

笔试成绩=writtenExam,机试成绩=labExam,

平均分=(writtenExam+labExam)/2

FROMstuInfoLEFTJOINstuMarks

ONstuInfo.stuNo=stuMarks.stuNo

GO

SELECT*FROMview_stuInfo_stuMarks--使用视图

11.存储过程

1.执行速度更快

2.允许模块化程序设计

3.提高系统安全性

4.减少网络流通量

常用的系统存储过程

sp_databases

列出服务器上的所有数据库。

sp_helpdb

报告有关指定数据库或所有数据库的信息

sp_renamedb

更改数据库的名称

sp_tables

返回当前环境下可查询的对象的列表

sp_columns

回某个表列的信息

sp_help

查看某个表的所有信息

sp_helpconstraint

查看某个表的约束

sp_helpindex

查看某个表的索引

sp_stored_procedures

列出当前环境中的所有存储过程

sp_password

添加或修改登录帐户的密码。

sp_helptext

显示默认值、未加密的存储过程、用户定义的存储过程、触发器或视图的实际文本。

EXECsp_databases

EXECsp_renamedb'Northwind','Northwind1'

USEstuDB

GO

EXECsp_tables

EXECsp_columnsstuInfo

EXECsp_helpstuInfo

EXECsp_helpconstraintstuInfo

EXECsp_helpindexstuMarks

EXECsp_helptext'view_stuInfo_stuMarks'

EXECsp_stored_procedures

常用的扩展存储过程:

xp_cmdshell

1.可以执行DOS命令下的一些的操作

2.以文本行方式返回任何输出

3.调用语法:

a)EXECxp_cmdshellDOS命令[NO_OUTPUT]

创建数据库bankDB,要求保存在D:

\bank

USEmaster

GO

EXECxp_cmdshell'mkdird:

\bank',NO_OUTPUT

IFEXISTS(SELECT*FROMsysdatabases

WHEREname='bankDB')

DROPDATABASEbankDB

GO

CREATEDATABASEbankDB

GO

EXECxp_cmdshell'dirD:

\bank\'--查看文件

创建不带参数的存储过程

CREATEPROCEDUREproc_stu

AS

DECLARE@writtenAvgfloat,@labAvgfloat

SELECT@writtenAvg=AVG(writtenExam),

@labAvg=AVG(labExam)FROMstuMarks

print'笔试平均分:

'+convert(varchar(5),@writtenAvg)

print'机试平均分:

'+convert(varchar(5),@labAvg)

IF(@writtenAvg>70AND@labAvg>70)

print'本班考试成绩:

优秀'

ELSE

print'本班考试成绩:

较差'

print'--------------------------------------------------'

print'参加本次考试没有通过的学员:

'

SELECTstuName,stuInfo.stuNo,writtenExam,labExam

FROMstuInfoINNERJOINstuMarksON

stuInfo.stuNo=stuMarks.stuNo

WHEREwrittenExam<60ORlabExam<60

GO

带输入参数的存储过程

CREATEPROCEDUREproc_stu

@writtenPassint,

@labPassint

[WITHENCRYPTION]//可选项加密存储过程

AS

print'--------------------------------------------------'

print'参加本次考试没有通过的学员:

'

SELECTstuName,stuInfo.stuNo,writtenExam,

labExamFROMstuInfo

INNERJOINstuMarksON

stuInfo.stuNo=stuMarks.stuNo

WHEREwrittenExam<@writtenPass

ORlabExam<@labPass

GO

调用带参数的存储过程

1.EXECproc_stu60,55

2.--或这样调用:

EXECproc_stu@labPass=55,@writtenPass=60

输入参数的默认值

CREATEPROCEDUREproc_stu

@writtenPassint=60,

@labPassint=60

AS

print'--------------------------------------------------'

print'参加本次考试没有通过的学员:

'

SELECTstuName,stuInfo.stuNo,writtenExam,

labExamFROMstuInfo

INNERJOINstuMarksON

stuInfo.stuNo=stuMarks.stuNo

WHEREwrittenExam<@writtenPass

ORlabExam<@labPass

GO

调用带参数默认值的存储过程

EXECproc_stu--都采用默认值

EXECproc_stu64--机试采用默认值

EXECproc_stu60,55--都不采用默认值

EXECproc_stu@labPass=55

带输出参数的存储过程

CREATEPROCEDUREproc_stu

@notpassSumintOUTPUT,--输出(返回)参数:

表示没有通过的人数

@writtenPassint=60,

@labPassint=60

AS

……--统计并返回没有通过考试的学员人数

SELECTstuName,stuInfo.stuNo,writtenExam,

labExamFROMstuInfoINNERJOINstuMarks

ONstuInfo.stuNo=stuMarks.stuNo

WHEREwrittenExam<@writtenPass

ORlabExam<@labPass

SELECT@notpassSum=COUNT(stuNo)

FROMstuMarksWHEREwrittenExam<@writtenPass

ORlabExam<@labPass

GO

调用带输出参数的存储过程

/*---调用存储过程----*/

DECLARE@sumint--调用时必须带OUTPUT关键字,返回结果将存放在变量@sum中

EXECproc_stu@sumOUTPUT,64

print'--------------------------------------------------'

IF@sum>=3

print'未通过人数:

'+convert(varchar(5),@sum)+'人,

超过60%,及格分数线还应下调'

ELSE

print'未通过人数:

'+convert(varchar(5),@sum)+'人,

已控制在60%以下,及格分数线适中'

GO

★output就是这个存储过程返回的值也可以说输出的值

--创建存储过程求最大值

CREATEPROCEDURE[dbo].[P_Max]

@aint,--输入

@bint,--输入

@Returncintoutput--输出

AS

if(@a>@b)

set@Returnc=@a

else

set@Returnc=@b

--调用

declare@Returncint

execP_Max2,3,@Returncoutput

select@Returnc

--存储过程set用法

createprocT001

as

declare@sqlvarchar(100)

set@sql='select*fromerp_user'

exec(@sql)

触发器

触发器是一种特殊的存储过程,类似于事件函数,SQLServer™允许为INSERT、UPDATE、DELETE创建触发器,即当在表中插入、更新、删除记录时,触发一个或一系列T-SQL语句。

触发器可以在查询分析器里创建,也可以在表名上点右键->“所有任务”->“管理触发器”来创建,不过都是要写T-SQL语句的,只是在查询分析器里要先确定当前操作的数据库。

创建触发器用CREATETRIGGER

CREATETRIGGER触发器名称

ON表名

FORINSERT、UPDATE或DELETE

AS

   T-SQL语句

注意:

触发器名称是不加引号的。

如下是联机丛书上的一个示例,当在titles表上更改记录时,发送邮件通知MaryM。

CREATETRIGGERreminder

ONtitles

FORINSERT,UPDATE,DELETE

AS

  EXECmaster..xp_sendmail'MaryM',

     'Don''tforgettoprintareportforthedistributors.'

二、删除触发器

用查询分析器删除

在查询分析器中使用droptrigger触发器名称来删除触发器。

也可以同时删除多个触发器:

droptrigger触发器名称,触发器名称...

注意:

触发器名称是不加引号的。

在删除触发器之前可以先看一下触发器是否存在:

ifExists(selectnamefromsysobjectswherename=触发器名称andxtype='TR')

用企业管理器删除

在企业管理器中,在表上点右键->“所有任务”->“管理触发器”,选中所要删除的触发器,然后点击“删除”。

三、重命名触发器

用查询分析器重命名

execsp_rename原名称,新名称

sp_rename是SQLServer™自带的一个存储过程,用于更改当前数据库中用户创建的对象的名称,如表名、列表、索引名等。

用企业管理器重命名

在表上点右键->“所有任务”->“管理触发器”,选中所要重命名的触发器,修改触发器语句中的触发器名称,点击“确定”。

四、more....

INSTEADOF

执行触发器语句,但不执行触发触发器的SQL语句,比如试图删除一条记录时,将执行触发器指定的语句,此时不再执行delete语句。

例:

createtriggerf

ontbl

insteadofdelete

as

   insertintoLogs...

IFUPDATE(列名)

检查是否更新了某一列,用于insert或update,不能用于delete。

例:

createtriggerf

on tbl

for update

as

   ifupdate(status) orupdate(title)

       sql_statement--更新了status或title列

inserted、deleted

这是两个虚拟表,inserted保存的是insert或update之后所影响的记录形成的表,deleted保存的是delete或update之前所影响的记录形成的表。

例:

createtriggertbl_delete

ontbl

fordelete

as

    declare@titlevarchar(200)

    select@title=titlefromdeleted

   insertintoLogs(logContent)values('删除了title为:

'+title+'的记录')

说明:

如果向inserted或deleted虚拟表中取字段类型为text、image的字段值时,所取得的值将会是 null。

五、查看数据库中所有的触发器

在查询分析器中运行:

use数据库名

go

select*fromsysobjectswherextype='TR'

sysobjects保存着数据库的对象,其中xtype为TR的记录即为触发器对象。

在name一列,我们可以看到触发器名称。

六、sp_helptext查看触发器内容

用查询分析器查看

use数据库名

go

execsp_helptext'触发器名称'

将会以表的样式显示触发器内容。

除了触发器外,sp_helptext还可以显示规则、默认值、未加密的存储过程、用户定义函数、视图的文本

用企业管理器查看

在表上点右键->“所有任务”->“管理触发器”,选择所要查看的触发器存储过程

七、sp_helptrigger用于查看触发器的属性

sp_helptrigger有两个参数:

第一个参数为表名;第二个为触发器类型,为char(6)类型,可以是INSERT、UPDATE、DELETE,如果省略则显示指定表中所有类型触发器的属性。

例:

use数据库名

go

execsp_helptriggertbl

 

八、递归、嵌套触发器

递归分两种,间接递归和直接递归。

我们举例解释如下,假如有表1、表2名称分别为T1、T2,在T1、T2上分别有触发器G1、G2。

∙间接递归:

对T1操

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 日语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1