数据库SQL Server 8 章(T-SQL)

思维导图

在这里插入图片描述
在这里插入图片描述

一、T-SQL

1.T-SQL编程介绍
Transact-SQL语言是结构化查询语言(SQL)的增强版本,与多种ANSI SQL标准兼容,而且在标准的基础上还进行了许多扩展。Transact-SQL代码已成为SQL Server的核心。Transact-SQL在关系数据管理系统中实现数据的检索、操纵和添加功能。
2.类型
在Microsoft SQL Server 2008系统中,Transact-SQL可以创建、维护、保护数据库对象,并且可以操作对象中的数据,所以Transact-SQL语言是一种完整的语言。根据T-SQL语言的执行功能特点,可以将T-SQL语言分为三种基本类型:
数据定义语言、数据操纵语言、数据控制语言
其他常用类型:
事务管理语言、流程控制语言、附加的语言元素
3.变量与常量
变量有两种 全局变量 和局部变量
局部变量:

DECLARE
{@local_variable[AS]data_type
|@cirspr_variable_nameCURSOR
}[,…n]

4.运算符
(1)算术运算符:

[1] +:加

[2] -:减

[3] *:乘

[4] /:除

[5] %:模除取余

(2)位运算符

[1] &(与,and): 按位逻辑与运算

[2] |(或,or): 按位逻辑或运算

[3] ~(非,not): 按位逻辑非运算

[4] (互斥OR):按位互斥运算

(3)比较运算符

关系运算符用来表示两个表达式之间的比较关系。

[1] = :等于;

[2] < :小于;

[3] > :大于;

[4] != 或 <> :不等于;

[5] >= : 大于等于;

[6] <= : 小于等于;

[7] !> :不大于;

[8] !< : 不小于。

(4)逻辑运算符

逻辑运算符用于表示两个表达式之间的逻辑关系:

[1] AND:逻辑与

[2] OR: 逻辑或

[3] NOT: 逻辑非

(5)特殊运算符

[1] % :通配符,通常与like配合使用,可指代任意长度的字符串;

[2] _ : 通配符,代表严格的一个字符。where name like '_xxx’将查找以xxx结尾的所有4个字母的名字(sxxx,dxxx等)

[3] [] : 指定范围([a-f])或集合([abcdefg])中的任何单个字符。where name like ‘[a-f]xxxx’,将超找以abcdef开头,xxxx结尾的字符。

[4] [^] : 不属于指定范围的([a-f])或集合([abcdefg])的任何单个字符。

[5] BETWEEN … AND … :定义一个取值范围区间,使用and分开。between开始值与and结束值。

[6] LIKE :字符串匹配。

[7] IN : 一个字段的值是否在一组定义的值之中。

[8] EXISTS:子查询有结果集返回(则子查询返回True)。

[9] NOT EXISTS:子查询没有结果集返回(则子查询返回True)。

[10] IS NULL : 字段是否为null。

[11] IS NOT NULL :字段是否不为null。

[12] ANY / SOME:ANY和SOME关键字是同义词,表示子查询结果集中任意一条记录满足条件,则返回TRUE。

[13] ALL:表示子查询结果集所有所有记录均满足条件,才返回TRUE。
5.语句
if … else …

declare @number_1 int ,@number_2 int
select @number_1 = 1,@number_2 = 2
if @number_1 > @number_2
print @number_1
else 
print @number_2

while

declare @x int
select @x = 3
while @x = 3
begin
print @x
end

case

--简单Case函数
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
--Case搜索函数
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END

wait for

WAITFOR
{
DELAY time
|TIME time
}

try…catch

TRY…CATCH 错误处理
Begin try
--如果没出错 | 如果出错了执行
End try | begin catch
End catch

6.函数
数学函数:
在这里插入图片描述
字符串函数:
在这里插入图片描述
日期函数:
在这里插入图片描述
聚合函数:
AVG 、COUNT 、MAX 、MIN 、SUM

标量值函数:

create function [owner_name] function_name
 ([{@parameter_name [as] scalar_parameter_date_type [=default]}[,…n]])
 returns scalar_return_data_type [with encryption] [as]
 begin
     function_body
     return scalar_expression
 end

表值函数:
在这里插入图片描述

二、游标

1.游标
游标:是一种数据访问机制,它允许用户访问单独的数据行,而不是对整个行集进行操作。用户可以通过单独处理,每一行逐条收集信息并对数据逐行进行操作,这样可以降低系统开销和潜在的阻隔情况。用户也可以使用这些数据生成SQL代码并立即执行或输出。
游标主要包括以下两部分:
游标结果集 由定义游标的SELECT语句返回的行的集合
游标位置 指向这个结果集中的某一行的指针。
2.游标特点
1)游标返回一个完整的结果集,但允许程序设计语言只调用集合中的一行;
2)允许定位在结果集的特定行;
3)从结果集的当前位置检索一行或多行;
4)支持对结果集中当前位置的行进行数据修改;
5)可以为其他用户对显示在结果集中的数据库数据所做的更改提供不同级别的可见性支持;
6)提供脚本、存储过程和触发器中使用的访问结果集中数据的T-SQL语句。
3.创建声明
在这里插入图片描述
4.游标操作
在这里插入图片描述

三、事务

1.事务语句
在SQL Server 2008系统中主要使用下列4条语句管理事务:
1)BEGIN TRANSACTION
2)COMMIT TRANSACTION
3)ROLLBACK TRANSACTION
4)SAVE TRANSACTION
2.事务模式
1)自动提交事务
每条单独的语句都是一个事务。
2)显式事务
每个事务均以BEGIN TRANSACTION语句显式开始,以COMMIT TRANSACTION语句显式结束。
3)隐式事务
在前一个事务完成时新事务隐式启动,但每个事务仍以COMMIT或ROLLBACK语句显式完成。
4)批处理级事务
只能应用于多个活动结果集(MARS),在MARS会话中启动的T-SQL显式或隐式事务变为批处理级事务。当批处理完成时没有提交或回滚的批处理级事务自动由SQL Server进行回滚。

四、锁

1.锁
所谓封锁,就是一个事务可向系统提出请求,对被操作的数据加锁(Lock)。其他事务必须等待此事务解锁(Unlock)之后才能访问该数据。从而,在多个用户并发访问数据库时,确保不互相干扰。可锁定的单位是:行、页、表、盘区和数据库。
2.锁的类型
1)共享(S)锁:用于读操作
多个事务可封锁一个共享单位的数据;
任何事务都不能修改加S锁的数据;
通常是加S锁的数据被读取完毕,S锁立即被释放。
2)独占(X)锁:用于写操作
仅允许一个事务封锁此共享数据;
其他任何事务必须等到X锁被释放才能对该数据进行访问;X锁一直到事务结束才能被释放。
3)更新(U)锁
用来预定要对此页施加X锁,它允许其他事务读,但不允许再施加U锁或X锁;
当被读取数据页将要被更新时,则升级为X锁;
U锁一直到事务结束时才能被释放。
3.死锁
所谓死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们将无法推进下去,此时称为系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象的死锁。
8.4死锁的必要条件
1)互斥条件
2)请求与保持条件
3)不剥夺条件
4)循环等待条件
8.5死锁的解除和预防
1)按同一顺序访问对象
2)避免事务中的用户交互
3)保持事务简短并在一个批处理中
4)使用低隔离级别
5)使用绑定连接
4.死锁的建议
1)对于频繁使用得表使用集簇化的索引;
2)设法避免一次性影响大量的T-SQL语句,特别是INSERT和UPDATE语句;
3)设法让UPDATE和DELETE语句使用索引;
4)使用嵌套事务时,避免提交和回退冲突
5)对一些数据不需要及时读取更新值的表在写SQL的时候在表后台加上(nolock),Select * from tableA(nolock)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值