数据库复习笔记

写在最前,

写文章的初衷只是为了复习与记录自己的成长,笔者目前水平还有待提高,文章中难免会出现许多问题与错误,文章内容仅供参考,有不足的地方还请大家多多包涵并指正,谢谢~

第八章 T-SQL程序结构 

8.1  注释和变量

8.1.1  T-SQL程序的基本结构 

1.批

批是一组SQL语句的集合,一个批以结束符GO而终结。批中的所有语句被一次提交给SQL Server,SQL Server将这些语句编译为一个执行单元在执行时全部执行。
注意:在执行批时:
(1)只要有其中任一个SQL语句存在语法错误,SQL Server将取消整个批内所有语句执行。
(2)如果没有语法问题可以运行,但发生逻辑错误(如算术溢出),则可能导致停止批中当前语句及后面语句执行,或仅停止当前语句执行,后面继续。这样可能发生严重错误,所以批应位于一个事务之内。

使用批的基本规则

(1)所有CREATE语句应单独构成一个批,不能在批中和其它SQL语句组合使用。
(2)使用ALTER TABLE语句修改表结构后,不能在同一个批中使用新定义的列
(3)EXCUTE语句为批中第一个语句时,可以省略EXCUTE关键字,否则,必须使用EXCUTE关键字。
(4)批命令GO和SQL语句不能在同一行上。但在GO命令中可以包含注释。
批命令GO并不是SQL的语句组成部分它仅是作为批结束的标志。当编译器读到GO时,会把它前面的所有语句打成一个数据包一起发给服务器。 

--正确批处理的例子:
USE  教学管理
GO
CREATE  VIEW  sub_学生表 
AS SELECT  学号,姓名FROM  学生表
GO
SELECT  *  FROM  sub_学生表
GO
--不正确批处理的例子1:
USE  教学管理
CREATE  VIEW  sub_学生表 
AS SELECT  学号,姓名FROM  学生表
GO
SELECT  *  FROM  sub_学生表
GO
错误的原因在于将选择数据库与创建视图放在了同一个批中,前面说过CREATE必须单独在一个批中。  
--不正确批处理的例子2:
USE  教学管理
GO
CREATE  TABLE mytab (name  nvarchar(20),pric  tinyint)
GO  
INSERT  INTO  mytab (name,pric) VALUES (‘Binete’, 3)
INSERT  INTO  mytab (name,pric) VALUES (‘Binete’, 3000)   --3000超过tinyint类型
GO

--第2个插入语句插入时出错,只产生部分数据(容易成为垃圾数据)。为了避免这种情况发生需要用事务保证批中的命令要么全做,要么全不做。 

2.程序结构  
一个T-SQL程序包含若干个以BEGIN TRANSACTION开始、以COMMIT(提交)或ROLLBACK(回滚)结束的事务,一个事务又包含若干个以GO结束的批处理,一个批处理包含若干条T-SQL语句。因此T-SQL程序的基本结构为:

{             
     BEGIN TRANSACTION
           {  T-SQL语句[ …n]
     GO
            }[ …n]
     { COMMIT | ROLLBACK }
}[ …n]

--例:下列T-SQL程序含两个事务,每个事务又含两个批处理。
USE  教学管理
GO
BEGIN TRANSACTION
   DELETE FROM 选课表 WHERE 学号=’S060101’
   DELETE FROM 学生表 WHERE 学号=’S060101’
   GO
   SELECT * FROM 选课表 WHERE 学号=’S060101’
   SELECT * FROM 学生表 WHERE 学号=’S060101’
   GO
ROLLBACK
BEGIN TRANSACTION
   INSERT INTO 学生表(学号,身份证号,姓名,专业,所在院系) VALUES
('S060199','****19880115***','张三','计算机','信息学院')
   INSERT INTO 选课表(学号,课程号) VALUES(’S060199’, ’010101’)
   GO
   SELECT * FROM 选课表 WHERE 学号=’S060199’
   SELECT * FROM 学生表 WHERE 学号=’S060199’
   GO
COMMIT

8.1.2  注释 

注释是程序代码中不执行的文本

你可能感兴趣的:(数据库复习笔记,数据库,笔记)