1、什么是Transact-SQL?
T-SQL(Transact Structured Query Language)是标准的Microsoft SQL Server 的扩展。是标准的SQL程序设计语言的增强版,是用来让程序与SQL Server 沟通的主要语言。
2、T-SQL语言主要由以下几部分组成
(1)数据定义语言:用于在数据库系统中对数据库、表、视图、索引等数据库对象进行创建和管理。
(2)数据控制语言:用于实现对数据库中数据的完整性、安全性等的控制。
(3)数据操纵语言:用于插入、修改、删除和查询数据库中的数据。
3、T-SQL语句结构如下
代码语言:javascript复制 SELECT 子句
[INTO 子句]
FROM 子句
[WHERE 子句]
[GROUP BY 子句]
HAVING 子句]
[ORDER BY 子句]
4、常量
数据在内存中存储始终不变化的量叫常量。常量,也称为文字值或标量值,是表示一个特定数据值的符号。常量的格式取决于它所表示的值的数据类型。
常见的常量有:
代码语言:javascript复制 (1) 数字常量
(2)字符串常量
(3)日期和时间常量
(4)符号常量
5、变量
数据在内存中存储可以变化的量叫变量。为了在内存存储信息,用户必须指定存储信息的单元,并为该存储单元命名,以方便获取信息,这就是变量的功能。Transact-SQL可以使用两种变量,一种是局部变量,另外一种是全局变量。局部变量和全局变量的主要区别在于存储的数据作用范围不一样。
局部变量是用户可自定义的变量,它的作用范围仅在程序内部。局部变量的名称是用户自定义的,命名的局部变量名要符合SQL Server 2008标识符命名规则,局部变量名必须以@开头。
全局变量是SQL Server系统内部事先定义好的变量,不用用户参与定义,对用户而言,其作用范围并不局限于某一程序,而是任何程序均可随时调用。
6、注释符、运算符与通配符
注释语句不是可执行语句,不参与程序的编译,通常是一些说明性的文字,对代码的功能或者代码的实现方式给出简要的解释和提示。
1)单行注释
单行注释以两个连字符“–”开始,作用范围是从注释符号开始到一行的结束。例如:
代码语言:javascript复制--CREATE TABLE temp
--( id INT PRIMAYR KEY, hobby VARCHAR(100) NULL)
2)多行注释
多行注释作用于某一代码块,该种注释使用斜杠星型(/**/),使用这种注释时,编译器将忽略从(/)开始后面的所有内容,直到遇到(/)为止。例如:
代码语言:javascript复制/*CREATE TABLE temp
( id INT PRIMAYR KEY, hobby VARCHAR(100) NULL)*/
运算符是一种符号,用来进行常量、变量或者列之间的数学运算和比较操作,它是Transact-SQL语言很重要的部分。运算符有几种类型,分别为:算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、连接运算符。
运算符的优先级由高到低的顺序如下:
代码语言:javascript复制 (1) (正)−(负)~(位反)
(2)*(乘)/(除)%(取余)
(3) (加) (字符串串联运算符)-(减)
(4)=、>、<、>、=、<、=、<、>、!、=、!、>、!、<(比较运算符)
(5)^(按位异或)&(按位与)| (按位或)
(6)NOT
(7)AND
(8)ALL ANY BETWEEN IN LIKE OR SOME(逻辑运算符)
(9)=(赋值)
若表达式中含有相同优先级的运算符,则从左向右依次处理。还可以使用括号来提高运算的优先级,在括号中的表达式优先级最高。如果表达式有嵌套的括号,那么首先对嵌套最内层的表达式求值。
在涉及模式匹配的字符串比较中使用%、_(下划线)、[ ]、[^]等通配符。
匹配指定范围内或者属于方括号所指定的集合中的任意单个字符。可以在涉及模式匹配的字符串比较(例如,LIKE 和 PATINDEX)中使用这些通配符。
在SQL中通常用LIKE关键字与通配符结合起来实现模糊查询。其中SQL支持的通配符如表所示。
7、流程控制语句
流程控制语句是用来控制程序执行流程的语句。使用流程控制语句可以提高编程语言的处理能力。与程序设计语言(如C语言)一样,Transact-SQL语言提供的流程控制语句如下所示。
8、常用命令
使用命令可以提高数据库的完整性和安全性,常见的命令如下:
(1)DBCC命令:用于验证数据库完整性、查找错误和分析系统使用情况等。
(2)CHECKPOINT命令:用于检查当前工作的数据库中被更改过的数据页或日志页,并将这些数据从数据缓冲器中强制写入硬盘。
(3)DECLARE命令:用于声明一个或多个局部变量、游标变量或表变量。
(4)PRINT命令:向客户端返回一个用户自定义的信息,即显示一个字符串局部变量或全局变量的内容。
(5)RAISERROR命令:用于在SQL Server系统中返回错误信息时同时返回用户指定的信息。
(6) READTEXT命令用于读取text、ntext或image列中的值,从指定的位置开始读取指定的字符数。
(7)BACKUP命令:用于将数据库内容或其事务处理日志备份到存储介质上。
(8)RESTORE命令:用来将数据库或其事务处理日志备份文件由存储介质还原到SQL Server系统中。
(9)SELECT语句除了有强大的查询功能外,还可用于给变量赋值。
(10)SET命令:用于给局部变量赋值和用于执行SQL命令时SQL Server的处理选项设定。
(11)SHUTDOWN命令:用于立即停止SQL Server的执行。
(12) WRITETEXT命令:允许对数据类型为 text、ntext 或 image 的列进行交互式更新。
(13)USE命令:用于在前工作区打开或关闭数据库。
9、事务
事务是由一系列语句构成的逻辑工作单元。事务和存储过程等批处理有一定程度上的相似之处,通常都是为了完成一定业务逻辑而将一条或者多条语句“封装”起来,使它们与其他语句之间出现一个逻辑上的边界,并形成相对独立的一个工作单元。事务包含4种重要的属性:
代码语言:javascript复制 (1)原子性(Atomic)
(2)一致性(ConDemoltent)
(3)隔离性(Isolated)
(4)持久性(Durability)
事务分为显式事务和隐式事务;
显式事务是用户自定义或用户指定的事务。可以通过BEGIN TRANSACTION、COMMIT TRANSACTION、COMMIT WORK、ROLLBACK TRANSACTION或ROLLBACK WORK事务处理语句定义显式事务。
隐式事务需要使用SET IMPLICIT_TRANSACTIONS ON语句将隐式事务模式设置为打开。在打开了隐式事务的设置开关时,执行下一条语句时自动启动一个新事务,并且每关闭一个事务时,执行下一条语句又会启动一个新事务,直到关闭了隐式事务的设置开关。
使用事务:
1)开始事务
当一个数据库连接启动事务时,在该连接上执行的所有Transact-SQL语句都是事务的一部分,直到事务结束。开始事务使用BEGIN TRANSACTION语句。
2)结束事务
当一个事务执行完成之后,要将其结束,以便释放所占用的内存资源,结束事务使用COMMIT语句。
3)回滚事务
使用ROLLBACK TRANSACTION语句可以将显式事务或隐式事务回滚到事务的起点或事务内的某个保存点。
锁:
锁是一种机制,用于防止一个过程在对象上进行操作时,同某些已经在该对象上完成的事情发生冲突。锁可以防止事务的并发问题,如丢失更新、脏读(dirty read)、不可重复读(NO-Repeatable Read)和幻影(phantom)等问题。
分布式事务处理:
在事务处理中,涉及到一个以上数据库的事务被称为分布式事务。分布式事务跨越两个或多个称为资源管理器的服务器。如果分布式事务由Microsoft分布事务处理协调器(MS DTC)这类事务管理器或其他支持X/Open XA分布事务处理范围的事务管理器进行协调,则SQL Server可以作为资源管理器运行。