SQL知识整理三:变量、全局变量、视图、事务、异常

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介:

1.局部变量的声明(一个@)

    declare @n int   --声明变量关键字为declare 然后@加变量名 后面是变量类型

    declare @s varchar(36)

  2.局部变量的赋值

    set @s='f4'

    set @n=@n+1  --变量的赋值有两种方法,一种是通过set,一种是select 如果变量不附初始值则默认为null,null参与计算的结果还是null,这一行的@n就等于null

    select @n=age from students  --如过变量通过select赋值,这里可能在表中查到很多age结果,这里只赋值查询出来的最后一个age结果,如果set使用这种方法会出错。

    set @n=(select age from Students where ID='1')--亦可以这样给他赋值

 

全局变量

  全局变量:是系统预定义的,返回一些系统信息,全局变量以两个@@开头。

  常用的变量:

@@CONNECTIONS 返回自上次启动以来连接或试图连接的次数。

@@CURSOR_ROWS 返回连接上最后打开的游标中当前存在的合格行的数量(返回被打开的游标中还未被读取的有效数据行的行数)

@@DATEFIRST 返回每周第一天的数字

@@ERROR 返回最后执行的SQL 语句的错误代码。

@@FETCH_STATUS 返回被 FETCH 语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。

@@IDENTITY 返回最后插入的标识值

@@LANGID 返回当前所使用语言的本地语言标识符(ID)。

@@LANGUAGE 返回当前使用的语言名。

@@LOCK_TIMEOUT 返回当前会话的当前锁超时设置,单位为毫秒。

@@PROCID 返回当前过程的存储过程标识符 (ID) 。

@@ROWCOUNT 返回受上一语句影响的行数。

@@SERVERNAME 返回运行 的本地服务器名称。

@@SPID 返回当前用户进程的服务器进程标识符 (ID)。

@@TRANCOUNT 返回当前连接的活动事务数。

@@VERSION 返回当前安装的日期、版本和处理器类型。

@@CPU_BUSY 返回自SQL Server 最近一次启动以来CPU 的工作时间其单位为毫秒

@@DATEFIRST 返回使用SET DATEFIRST 命令而被赋值的DATAFIRST 参数值SET DATEFIRST,命令用来指定每周的第一天是星期几

@@DBTS 返回当前数据库的时间戳值必须保证数据库中时间戳的值是惟一的

@@ERROR 返回执行Transact-SQL 语句的错误代码

@@FETCH_STATUS 返回上一次FETCH 语句的状态值

@@IDLE 返回自SQL Server 最近一次启动以来CPU 处于空闭状态的时间长短单位为毫秒

@@IO_BUSY 返回自SQL Server 最近一次启动以来CPU 执行输入输出操作所花费的时间其单位为毫秒

@@LANGID 返回当前所使用的语言ID 值

@@LANGUAGE 返回当前使用的语言名称

@@LOCK_TIMEOUT 返回当前会话等待锁的时间长短其单位为毫秒

@@MAX_CONNECTIONS 返回允许连接到SQL Server 的最大连接数目

@@MAX_PRECISION 返回decimal 和numeric 数据类型的精确度

@@NESTLEVEL 返回当前执行的存储过程的嵌套级数初始值为0

@@OPTIONS 返回当前SET 选项的信息

@@PACK_RECEIVED 返回SQL Server 通过网络读取的输入包的数目

@@PACK_SENT 返回SQL Server 写给网络的输出包的数目

@@PACKET_ERRORS 返回网络包的错误数目

@@PROCID 返回当前存储过程的ID 值

@@REMSERVER 返回远程SQL Server 数据库服务器的名称

@@SERVICENAME 返回SQL Server 正运行于哪种服务状态之下如MSSQLServer MSDTC SQLServerAgent

@@SPID 返回当前用户处理的服务器处理ID 值

@@TEXTSIZE 返回SET 语句的TEXTSIZE 选项值SET 语句定义了SELECT 语句中text 或image数据类型的最大长度基本单位为字节

@@TIMETICKS 返回每一时钟的微秒数

@@TOTAL_ERRORS 返回磁盘读写错误数目

@@TOTAL_READ 返回磁盘读操作的数目

@@TOTAL_WRITE 返回磁盘写操作的数目

@@TRANCOUNT 返回当前连接中处于激活状态的事务数

视图

  1.视图是一张虚拟表,他所存储的不是实际数据,而是查询语句,但我们可以对视图进行像数据表一样的操作。

  2.为什么使用视图呢?我的理解是:1.在远程传输数据时,可以避免过长的查询字符,减少流量。2.他可以简化繁杂的多表嵌套查询语句。3.安全性,防止非法用户访问敏感数据,因为我们可以通过创建视图展示给用户,我们想要给他们查看的数据。

  3.视图的创建

    create view vw_city

    as

    select cityName from city   --这个查询语句可以随便的写,如果是些多层次的嵌套查询语句的话,那么下面使用视图的简易性就突出了。应为只用一句简短的查询语句就能把原本繁杂的搞定

  4.视图的查询

    select * from vw_city

  5.由于视图是以查询语句的形式存储的,所以一般视图只用于查看数据,一般不对视图进行增删改。如果数据库中的表数据改变那么视图中的数据也会随之改变,因为视图就相当于查询语句

 

事务

  事务定义:

         事务有若干条T-SQL指令组成,并且所有的指令昨晚一个整体提交给数据库系统,执行时,这组指令要么全部执行完成,要么全部取消。因此,事务是一个不可分割的逻辑单元。

 

  事务的特点:

         事务有4个属性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)以及持久性(Durability),也称作事务的ACID属性。

         原子性:事务内的所有工作要么全部完成,要么全部不完成,不存在只有一部分完成的情况。

         一致性:事务内的然后操作都不能违反数据库的然后约束或规则,事务完成时有内部数据结构都必须是正确的。

         隔离性:事务直接是相互隔离的,如果有两个事务对同一个数据库进行操作,比如读取表数据。任何一个事务看到的所有内容要么是其他事务完成之前的状态,要么是其他事务完成之后的状态。一个事务不可能遇到另一个事务的中间状态。

         持久性:事务完成之后,它对数据库系统的影响是持久的,即使是系统错误,重新启动系统后,该事务的结果依然存在。

 

  事务的模式:

         显示事务:是用户使用T-SQL明确的定义事务的开始(begin transaction)和提交(commit transaction)或回滚事务(rollback transaction)

         自动提交事务:是一种能够自动执行并能自动回滚事务,这种方式是T-SQL的默认事务方式。例如在删除一个表记录的时候,如果这条记录有主外键关系的时候,删除就会受主外键约束的影响,那么这个删除就会取消。

    可以设置事务进入隐式方式:set implicit_transaction on;

         隐式事务:是指当事务提交或回滚后,SQL Server自动开始事务。因此,隐式事务不需要使用begin transaction显示开始,只需直接失业提交事务或回滚事务的T-SQL语句即可。

    使用时,需要设置set implicit_transaction on语句,将隐式事务模式打开,下一个语句会启动一个新的事物,再下一个语句又将启动一个新事务。

 

  事务的示例:

复制代码
begin tran

    select * from student where  sname=@name and sage=@age

    if @@ERROR<>0

       begin

           rollback tran

           insert into student(studentid,sname,sage) values (1,@name,@age)

           return 0

       end

    else

       begin

       commit tran

       select * from student

       end

go
复制代码

 

异常

  错误函数:

  TRY...CATCH 使用错误函数来捕获错误信息。       ERROR_NUMBER() 返回错误号。       ERROR_MESSAGE() 返回错误消息的完整文本。此文本包括为任何可替换参数(如长度、对象名称或时间)提供的值。       ERROR_SEVERITY() 返回错误严重性。       ERROR_STATE() 返回错误状态号。       ERROR_LINE() 返回导致错误的例程中的行号。       ERROR_PROCEDURE() 返回出现错误的存储过程或触发器的名称。

 

  异常示例:

复制代码
begin try
    select 1 / 0;
end try
begin catch
    exec proc_error_info; --调用错误消息存储过程
end catch
go
复制代码
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
1月前
|
SQL
【YashanDB知识库】like 变量的SQL语句应用程序执行效率低与yasql执行效率高
【YashanDB知识库】like 变量的SQL语句应用程序执行效率低与yasql执行效率高
|
5月前
|
SQL Oracle 关系型数据库
[SQL]事务
本文介绍了事务处理的基本概念,包括事务的四大特性(原子性、一致性、隔离性、持久性)及生命周期。文章还详细解释了事务的保存点、四种事务隔离级别及其异常读现象,并提供了设置事务隔离级别的方法。最后,作者建议读者深入学习相关理论以更好地理解事务隔离级别。
107 0
|
6月前
|
SQL 存储 数据库
实验4:SQL视图操作与技巧
在SQL数据库管理中,视图(View)是一种虚拟表,它基于SQL查询的结果集创建,并不存储实际数据,而是存储查询定义
|
6月前
|
SQL 存储 数据库
实验4:SQL视图操作技巧与方法
在数据库管理系统中,视图(View)是一种虚拟表,它基于SQL查询的结果集创建,并不实际存储数据
|
6月前
|
存储 SQL 安全
|
6月前
|
SQL 数据库
SQL使用视图的优缺点
SQL使用视图的优缺点
184 0
|
6月前
|
存储 SQL 数据库
使用SQL创建视图和存储过程
使用SQL创建视图和存储过程
62 0
|
6月前
|
SQL 数据库
执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)之解决方案
执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)之解决方案
935 0
|
8月前
|
存储 SQL 安全
【数据库高手的秘密武器:深度解析SQL视图与存储过程的魅力——封装复杂逻辑,实现代码高复用性的终极指南】
【8月更文挑战第31天】本文通过具体代码示例介绍 SQL 视图与存储过程的创建及应用优势。视图作为虚拟表,可简化复杂查询并提升代码可维护性;存储过程则预编译 SQL 语句,支持复杂逻辑与事务处理,增强代码复用性和安全性。通过创建视图 `high_earners` 和存储过程 `get_employee_details` 及 `update_salary` 的实例,展示了二者在实际项目中的强大功能。
84 1
|
7月前
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
404 0

热门文章

最新文章

下一篇
oss创建bucket