【数据库】数据库视频总结(七)

举报
Laura_张 发表于 2022/08/27 22:22:35 2022/08/27
【摘要】                                       第八章  Transact-SQL编程 目录 概...

                                      第八章  Transact-SQL编程

目录

概述

常量与变量

表达式:

注释

if……else 语句(流程控制语句)

case语句

 while语句

waitfor延迟语句

try……catch 错误处理语句

标量值函数

表值函数

事务

系统与元数据函数

 begin……end语句块

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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。