【数据库】数据库视频总结(七)
第八章 Transact-SQL编程
目录
概述
SQL是结构化查询语言,T-SQL是微软公司定义的标准。
T-SQL是数据库的核心内容,实现数据的检索操纵,T-SQL可以创建,维护,保护数据库对象。
分类:数据定义类型;数据操纵类型;数据控制语言。
其他类型:事务管理语言;流程控制语言;附加的语言元素。
常量与变量
变量:
全局变量,系统内置的。
局部变量,用户声明的。
语法格式:
进行赋值,使用set语句或者是select语句。(select语句需要注意是单个值)
Set @local_variable=expression
Select @local_variable=expression
实例:
'声明变量并查询,两种方式:
Declare @name nvarchar(50)
Set @name='黎明'
Select @name
Declare @name nvarchar(50)
Set @name='黎明'
Select @name='王明'
Select @name
'这种情况下,查询结果为第二个。
表达式:
declare @str nvarchar(50)
select @str='姓名:'+ student_Name +'性别:'+ student_Sex from student_Info
where student_ID ='6536'
select @str
注释
对程序代码中不被执行的文本字符串。
单行注释:使用双连字符
多行注释:使用/* */
if……else 语句(流程控制语句)
语法格式:
实例:
declare @name int
select @name=AVG(result)
from result_Info
where exam_No='12303' and class_No='5655'
if @name >=100
begin
print '这门课程老师教课非常成功'
end
else
print '这门课程老师还需要继续努力'
declare @num int --声明变量
select @num=AVG(result) --变量获取这个值
from result_Info
where exam_No='12303' and class_No='5655'
if @num >=60
begin
if @num <=70
print'成绩刚刚及格,还需要努力'
else if @num <80
print '成绩中等'
else if @num<90
print'成绩良好'
else print '成绩优秀'
end
else
print '这门课程老师教学方法需要改进'
case语句
语法格式:
实例:
select student_Name, student_Sex ,代号 =
case student_Sex
when '女' then '1'
else '2'
end
from student_Info
while语句
语法格式:
实例:求10的阶乘
declare @i int,@num int --声明变量
set @i =1 --进行赋值
set @num =1
while @i<=10
begin
set @num =@num*@i
set @i =@i+1
end
print @num
实例:打印3到100之间的素数(在while语句中使用循环,使用嵌套。)
declare @i int
declare @j int
set @i =3
while @i<=100
begin
declare @bol int
set @bol=1
set @j=2
while @j<=sqrt(@i)
begin
if @i%@j=0
begin
set @bol=0
break
end
set @j=@j+1
end
if @bol =1 print @i
set @i=@i+1
end
waitfor延迟语句
语法格式:
--Delay +时间值
waitfor delay'00:00:05'
exec sp_help
--等待5秒钟之后实行存储
--到这个时间实行存储。
waitfor time '15:37:40'
exec sp_help
select GETDATE()
try……catch 错误处理语句
语法格式:
实例:查询错误行数和错误消息
begin try
declare @num int
set @num =1/0
select @num
end try
begin catch
select ERROR_LINE () as '错误行数',ERROR_MESSAGE(),'错误消息'
end catch
标量值函数
用户自定义的函数:标量值函数,表值函数,多语句表值函数
直接找到标量值函数的模板,修改一下就可以。
语法格式:
实例:
create function avgsum(@id varchar(10))
returns int
as
begin
declare @sum int
select @sum =AVG(result) from result_Info
where student_ID =@id
return @sum
end
go
'创建成功之后刷新就可以看到新建了一个标量值函数。
表值函数
语法格式:
实例:创建表值函数连接
declare @id int
CREATE FUNCTION findcourse(@id varchar(10))
RETURNS TABLE
AS
RETURN
(
select 课程名称,姓名,分数 from
(
select B.课程名称,C.姓名,AVG (A.分数) 分数
from 成绩信息1 A join 课程信息1 B
on A.课程编号=B.课程编号
join 教师信息1 C on B.任课教师 =C.教师编号
where A.考试编号=@id
group by B.课程名称 ,C.姓名
) a
where 分数>=85
)
GO
'进行执行:
select * from findcourse('0801')
事务
同时进行修改记录会出现错误,需要创建事务进行处理。
事务的管理语句:
Begin transaction; Commit transaction 提交执行; Rollback transaction 回滚执行; Save transaction 保存执行
实例:查看有几行受到影响
begin transaction
declare @nation varchar(20)
set @nation='男'
insert into student_Info values('1234585','张艳伟',@nation,'2019-02-23','12302','15631670968','2017-02-23','156212','2525522')
if @nation='女'
begin
commit transaction
end
else
rollback transaction
锁
定义:使用事务进行模块化的编程,所有事务执行都执行,不执行都不执行。
锁的基本作用:事务对系统提出请求,对被操作的数据加锁,其他事务等到次事务解锁之后才可以访问数据库。从而,多个号用户并发访问数据库时,互不干扰。可以锁定的单位是行、页、表、盘区和数据库。
类型:
共享锁(S锁):用于读操作。多个用户可以封锁一个共享单位的数据。任何事务不可以修改加S锁的数据。加S锁的数据读取完毕之后,S锁立即被释放。
独占锁(X锁):写操作。允许一个事务封锁共享数据。其他事务必须等到X锁被释放才能对该数据进行访问。X锁一直到事务结束才能被释放。
更新锁(U锁):用来预定要对此页施加X锁,允许其他事务读,单不允许在施加U锁或者是X锁。当被读取的数据页将要被更新时,则升级为X锁。U锁一直到事务结束才可以被释放。
死锁:多个进程在执行过程中,因争夺资源造成一种互相等待的现象,没有外力时,会永久等待。
死锁产生条件:
死锁的解除和预防:按同一顺序访问对象;避免事务中的用户交互;保持事务简短并在一个批处理中;使用低隔离级别;使用绑定连接。
系统与元数据函数
Convert ()转换函数,讲一种数据类型的数据转变成另一种数据类型的数据。
Current user 函数,返回当前用户的名称
Isdate 判断输入是否是一个有效日期、
Isnull 用一个指定替换值替换任何空值,避免出现空值
isnumEric 判断输入是否是一个数值。
实例:
declare @str varchar(10),@i int --声明变量
set @str='12'
set @i =10
if isnumeric(@str)=1 --判断是否是数值
begin
print convert(int,@str)*@i--转化数据类型,并*@i,打印出来。
end
print isnull(@j,10)*@i
begin……end语句块
语法格式:
实例:
declare @sex varchar(5)
if @sex is not null
begin
select * from student_Info where student_Sex=@sex
print '查询成功'
end
else
begin
print'查询失败,参数为空'
end
SQL中的事务模式
常见的事务模式:
自动提交事务:执行成功自动提交,不成功回滚操作。
显式事务:事务以begin transaction 显示开始,以commit 或rollback语句显示结束。
隐式事务:在前一个事务完成时新事务隐式启动,但每个事务仍以commit或者rollback语句显示完成。
批处理级事务:只能应用于多个活动结果集(MARS),在MARS会话中启动的SQL显示或隐式事务变为批处理级事务。
嵌套事务
嵌套使用事务,保证事务的顺序。
实例:
begin transaction T1 -- 创建事务T1
update course_Info set course_Name='语文系一般'
where course_No='115' --修改课程名
if exists(select * from course_Info where course_Name='语文系一般')--判断是否修改成功
begin
begin transaction t2--创建事务T2
update course_Info set course_Type='选修课'
where course_Name='语文系一般' --根据修改后的课程名,修改课程类型
if exists (select * from gradecourse_Info where course_Name='语文系一般')--判断课程类型是否处于课程信息表中
commit transaction t2 --提交事务
else
begin
rollback transaction t2--回滚事务
end
commit transaction T1--提交事务T1
end
else
rollback transaction T1--没有提交成功,回滚事务T1
感谢您的阅读,欢迎斧正~
文章来源: blog.csdn.net,作者:张艳伟_Laura,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/Laura__zhang/article/details/103096366
- 点赞
- 收藏
- 关注作者
评论(0)