必发88手机客户端 25

二〇一〇从入门到明白必发88手机客户端,SQL编制程序规范

目录

摘要 正文是参谋相关资料总括的一篇有关T-SQL语言编制程序标准的小说,意在为索要那上面质地的IT公司规划开拓人士提供二个参照他事他说加以考察。
来源:

1. 
概述
1.1.
主干条件
以大小写敏感编写SQL语句。
尽大概使用Unicode 数据类型。
优先选用连接取代子查询或嵌套查询。
尽可能利用参数化SQL查询代替语句拼接SQL查询。
不准利用[拼音]+[英语]的点子来命名SQL对象或变量。
全力以赴选用存款和储蓄进程替代SQL语句。

  • 1.应用Transact-SQL语言编制程序
    • 1.1.多少定义语言DDL
    • 1.2.数目操纵语言DML
    • 1.3.多少调节语言DCL
    • 1.4.Transact-SQL言语基础
  • 2.运算符
    • 2.1.算数运算符
    • 2.2.赋值运算符
    • 2.3.位运算符
    • 2.4.比较运算符
    • 2.5.逻辑运算符
    • 2.6.连接运算符
    • 2.7.一元运算符
    • 2.8.运算符的初期级
  • 3.决定语句
    • 3.1.BEGIN
      END语句块
    • 3.2.IF
      ELSE语句块
    • 3.3.CASE分支语句
    • 3.4.WHILE语句
    • 3.5.WAITFOLacrosse推迟语句
    • 3.6.RETU福睿斯N无条件退出语句
    • 3.7.GOTO跳转语句
    • 3.8.T逍客Y
      CATCH错误管理语句
  • 4.常用函数
    • 4.1.数据类型转变函数

概述

1.2.
主导规范
提议利用帕斯Carl样式或Camel样式命名数据库对象。
大写T-SQL语言的持有重点字,谓词和系统函数。

1.行使Transact-SQL语言编制程序

即便SQL Server
2008提供了图形化分界面,但独有一种Transact-SQL语言能够直接与数据库引擎进行相互。依照实行坚决守住特色能够将Transact-SQL语言分成3大类:数据定义语言DDL,数据操纵语言DML,数据调节语言DCL。

1.1.着力准则

以大小写敏感编写SQL语句。

尽量采纳Unicode
数据类型。

预先利用连接代替子查询或嵌套查询。

尽心竭力接纳参数化SQL查询取代语句拼接SQL查询。

不准使用[拼音]+[英语]的法子来定名SQL对象或变量。

尽恐怕利用存款和储蓄进程取代SQL语句。

2. 
命名标准
在平时景色下,选择帕斯Carl样式或Camel样式命名数据库对象,使在付出基于数据库应用程序的时候经过ORM工具生成的数码访谈代码无需调动就切合程序开垦语言(比方C#)命名标准。别的,关系型数据库同Xml结合得更为严密,标准的命名愈来愈首要。
在其实数据库开拓进度中,即便供给方已经提供数据库设计方案,建议以提供的方案为准;在原本数据库上进展晋级开采时,在有效的景况下可非凡做出规划调治以相符编制程序规范。

1.1.数量定义语言DDL

是最基础的Transact-SQL语言类型,用来成立数据库和创办,修改,删除数据库中的各样对象,为其余语言的操作提供对象。比如数据库,表,触发器,存款和储蓄进度,视图,函数,索引,类型及顾客等都以数据库中的对象。常见的DDL语句包含

CREATE TABLE--创建表
DROP TABLE--删除表
ALTER TABLE--修改表

1.2.中坚标准

提出采取帕斯Carl样式或Camel样式命名数据库对象。

大写T-SQL语言的保有重要字,谓词和系统函数。

1.3.
对象命名
1.3.1. 
数据库
第一种艺术,选拔帕斯Carl样式命名,命名格式为[项目德语名称]。
示例:AdventureWorks
其次种格局,选择帕斯Carl样式命名,命名格式为[类型德语名称] + Db。
示例:AdventureWorksDb
  BizTalkRuleEngineDb
提议使用第一种方法。

1.2.数量操纵语言DML

是用以操纵表和视图中的数据的话语,举例查询数据(SELECT),插入数据(INSERT),更新数据(UPDATE)和删除数据(DELETE)等。

取名标准

在平时意况下,采纳帕斯Carl样式或Camel样式命名数据库对象,使在付出基于数据库应用程序的时候经过ORM工具生成的多少访谈代码不须要调动就相符程序支付语言(比如C#)命名规范。其他,关系型数据库同Xml结合得更为紧凑,标准的命名更加的重要。

在其实数据库开辟进程中,要是需要方已经提供数据库应用方案,提出以提供的方案为准;在原始数据库上扩充升级换代开采时,在有效的图景下可适用做出统筹调整以切合编制程序标准。

1.3.2. 
数据库文件
数据文件:[数据库名称] + _Data.mdf
日记文件:[数据库名称] + _Log.ldf
示例:AdventureWorks_Data.mdf
      AdventureWorks_Log.ldf

1.3.数据调控语言DCL

涉及到权力管理的言语称为数据调整语言,重要用来施行有关安全管理的操作。如给予权限(GRANT),收回权限(REVOKE),拒绝付与主体权限,并防御主体通过组或剧中人物成员持续权限(DENY

1.3.对象命名

1.3.3. 
关系型数据酒馆
使用帕斯Carl样式命名,命名格式为[类型乌Crane语名称] + DW。
示例:AdventureWorksDW

1.4.Transact-SQL语言基础

1.3.1. 数据库

第一种艺术,选择帕斯Carl样式命名,命名格式为[项目罗马尼亚语名称]。

示例:AdventureWorks

其次种情势,选用Pascal样式命名,命名格式为[类型泰语名称]

  • Db。

示例:AdventureWorksDb

 
BizTalkRuleEngineDb

提议使用第一种方法。

1.3.4. 
数量架构
除SQL Server
系统定义的多寡架构外,新建架构选用帕斯Carl样式命名,命名格式为[架构名]。
示例:HumanResources
      Production

1.4.1.常量与变量

常量非常少说。在SQL Server
2010中,存在二种变量。一种是系统定义和掩护的全局变量,一种是客户定义用来保存中间结果的有个别变量。

1.3.2. 数据库文件

数据文件:[数据库名称] +
_Data.mdf

日志文件:[数据库名称] +
_Log.ldf

示例:AdventureWorks_Data.mdf

     
AdventureWorks_Log.ldf

对数据库对象 Table,View,Procedure,Function等使用数据架构举办分类。在SQL
Server 三千中dbo为暗中认可架构。

1.4.1.1.连串全局变量

系统全局变量分为两大类,一类是与自然SQL
Server连接或与当下拍卖有关的全局变量,如@@Rowcount意味着近年来二个口舌影响的行数。@@error表示保留方今奉行操作的荒唐状态。一类是与总体SQL
Server系统有关的全局变量,如@@Version代表近日SQL Server的版本新闻。

SELECT @@VERSION AS 当前版本;--查看当前SQL Server的版本信息

结果如图所示
必发88手机客户端 1

1.3.3. 关系型数据饭馆

应用帕Skar样式命名,命名格式为[品种德文名称]

  • DW。

示例:AdventureWorksDW

1.3.5. 
数据表
动用帕斯Carl样式命名,命名格式为[表名]。
示例:Employee
      Product

1.4.1.2.局部变量

局部变量能够具备一定数据类型,有料定的成效域,通常用来当做计数器总括或决定循环执行次数,也许用于保存数据值。局地变量前唯有1个@符,用DECLARE语句阐明局部变量。

USE test
DECLARE @StudentId varchar(20)
SET @StudentId=(
SELECT Student.stu_no
FROM Student
WHERE stu_enter_score='603')
SELECT @StudentId AS 入学分数为603的学生学号
GO

结果如图所示
必发88手机客户端 2

1.3.4. 数码架构

除SQL Server
系统定义的数目架构外,新建架构采纳帕斯Carl样式命名,命名格式为[架构名]。

示例:HumanResources

      Production

对数据库对象
Table,View,Procedure,Function等采纳数据架构实行归类。在SQL Server
3000中dbo为暗许架构。

表名以保加温尼伯语单数命名,主纵然参照SQL Server
二〇〇六示范数据库,个人知道不选拔复数是为了越来越好的选拔ORM工具生成相符编制程序标准的代码(譬喻C#)。
示例:使用Product
  而不是Products

2.运算符

1.3.5. 数据表

选拔帕斯Carl样式命名,命名格式为[表名]。

示例:Employee

      Product

表名以斯洛伐克语单数命名,首若是参照SQL
Server
二零零五示范数据库,个人通晓不采纳复数是为了越来越好的运用ORM工具生成切合编制程序标准的代码(举个例子C#)。

示例:使用Product

 而不是Products

1.3.6. 
数目视图
视图名称选择帕斯Carl样式命名,命名格式为v + [视图名称]。
示例:vEmployee
      vSalesPerson

2.1.算数运算符

在SQL Server
二〇〇九中,算数运算包罗加(+)减(-)乘(*)除(/)取模(%)。举一个简短的例证。
示例1:在Student表中增多一列,列名叫stu_age,根据Student表的stu_birthday列计算stu_age列并插入数据。(演示插入整列数据的秘诀)
Student表数据如图所示
必发88手机客户端 3
实施上面包车型地铁言辞

ALTER TABLE Student
ADD stu_age int;--在Student表中添加stu_age列
CREATE TABLE #agetemp(stu_no varchar(8),age int);--新建一个临时表
INSERT INTO #agetemp(stu_no,age)--在临时表中插入学号和计算出来的年龄
SELECT Student.stu_no,YEAR(GETDATE())-YEAR(stu_birthday)--利用函数和运算符计算年龄
FROM Student;
UPDATE Student
SET Student.stu_age=#agetemp.age--将临时表中的age列数据整个复制到Student表的stu_age列
FROM #agetemp
WHERE Student.stu_no=#agetemp.stu_no--条件是两个表的stu_no列值相等
GO
SELECT * FROM Student

结果如图所示
必发88手机客户端 4

1.3.6. 数额视图

视图名称选择帕斯Carl样式命名,命名格式为v

  • [视图名称]。

示例:vEmployee

     
vSalesPerson

1.3.7. 
数据列
列名称命名采纳匈牙利语单词或缩写,菲律宾语单词只来自于实际事情定义,尽量发挥清楚含义。采取帕斯Carl样式命名,命名格式为[列名称]。
示例:AddressID
      PostalCode

2.2.赋值运算符

即等号(=),将表明式的值付与另二个变量。举多少个简约的例证。
示例2:计算Student表中学生的平均入学战表并打字与印刷。
Student表的多寡如图所示,stu_enter_score列寄存了学生的入学战绩
必发88手机客户端 5
实行上边包车型大巴讲话

DECLARE @average int--声明@average变量
SET @average=(--将计算出的平均值赋值给@average
SELECT AVG(stu_enter_score)
FROM Student)
PRINT @average--打印@average的值

结果如图所示
必发88手机客户端 6

1.3.7. 数据列

列名称命名接纳意大利语单词或缩写,俄文单词只来自于实务定义,尽量发挥清楚含义。接纳Pascal样式命名,命名格式为[列名称]。

示例:AddressID

      PostalCode

尽量制止使用拼音命名,假如不可制止,对于非常短的列名,采取拼音全写,假使拼音列名比较复杂,能够采纳第三个字用全拼,其余字用首字母大写表示。

示例:宁波
Ningbo

  经营方式 JingYFS

尽量防止使用拼音命名,倘诺不可幸免,对于非常的短的列名,选拔拼音全写,倘使拼音列名相比复杂,能够运用第二个字用全拼,另外字用首字母大写表示。
示例:宁波 Ningbo
  经营情势 JingYFS

2.3.位运算符

位运算符蕴含与运算(&),或运算(|)和异或运算(^),能够对多少个表明式进行位操作,那七个表明式可以是整型数据或二进制数据。Transact-SQL首先把整型数据调换为二进制数据,然后按位运算。举个轻松的事例。
示例3:申明2个int型变量@num1,@num2,对那七个赋值且做与或异或运算。
实践下边包车型客车话语

DECLARE @num1 int,@num2 int
SET @num1=5 
SET @num2=6
SELECT @num1&@num2 AS 与,
@num1|@num2 AS 或,
@num1^@num2 AS 异或

结果如图所示
必发88手机客户端 7
扩充示例4:写一个十进制调换为二进制的函数

CREATE FUNCTION Bin_con_dec(@dec int)--定义十进制转换为二进制函数
RETURNS varchar(20)
AS
BEGIN
DECLARE @quo int,@remainder varchar(20),@quo1 int
SET @quo=@dec
SET @remainder=''
WHILE @quo<>0
BEGIN
SET @quo1=@quo/2
SET @remainder=CAST(@quo%2 AS varchar(20))+@remainder
SET @quo=@quo1
END
RETURN @remainder
END

施行上边的函数后,运维下列语句验证函数准确性

PRINT dbo.Bin_con_dec(42)

结果为101010,函数定义精确。

1.3.8. 存储进程

建议利用帕斯Carl样式命名,命名格式为[存款和储蓄进度名称]。

示例:GetUser

     AddUser

备考:在SQL Server
2006示范数据库中动用Camel样式命名。

1.3.8. 
囤积进度
提出接纳帕斯Carl样式命名,命名格式为[积累进度名称]。
示例:GetUser
     AddUser

2.4.比较运算符

也称关系运算符,用于比比较多少个值的涉及,常见的有等于(=),大于(>),小于(<),大于等于(>=),小于等于(<=),不等于(<>或!=)
示例5:从Student表中询问入学成绩在平均分以上的学生新闻
Student表的数目如图所示
必发88手机客户端 8
执行下列语句

DECLARE @ave int
SET @ave=(SELECT AVG(stu_enter_score) FROM Student)
SELECT *FROM Student
WHERE stu_enter_score>=@ave;

结果如下图所示
必发88手机客户端 9

注:无法平昔把代码写成上面包车型客车样式

SELECT * FROM Student
WHERE stu_enter_score>=AVG(stu_enter_score)

消息147,级别15,状态1,第2 行
汇聚不应出未来WHERE 子句中,除非该聚合位于HAVING
子句或选拔列表所含有的子查询中,並且要对其开展联谊的列是外界援引。

因为AVG是聚合函数。

1.3.9. 函数

自定义函数选取帕斯Carl样式命名,命名格式为[函数名],系统函数使用成套大写。

示例:SELECT ISNULL(@LastName,’Unknown last
name’);

GETDATE()

备注:在SQL Server 二〇〇五演示数据库中利用Camel样式命名。

2.5.逻辑运算符

逻辑运算符的效能是对标准进行测验。ALL,AND,ANY,BETWEEN,EXISTS,IN,LIKE,NOT,ALL,SOME。上面用SOME来比喻。SOME的功用是只要在一组比较中,某些为true那就为true。
示例6:查询Student表中是或不是存在入学战绩超乎平均分的学员,假如存在,输出true,空头支票输出false。
Student表的stu_enter_score列(入学战绩)数据如图所示
必发88手机客户端 10
进行上面包车型地铁言语

USE test
IF (SELECT AVG(stu_enter_score) FROM Student)<=SOME(SELECT stu_enter_score FROM Student)
PRINT 'true'
ELSE
PRINT 'false'
GO

结果如图所示
必发88手机客户端 11

1.3.10.     顾客定义数据类型

行使帕斯Carl样式命名,命名格式为[自定义数据类型名称]。

示例:Flag

      NameStyle

1.3.9. 
函数
自定义函数选用帕Skar样式命名,命名格式为[函数名],系统函数使用一切大写。
示例:SELECT ISNULL(@LastName,’Unknown
last name’);
GETDATE()

2.6.连接运算符

加号(+)是字符串连接运算符,能够用它把字符串串连起来,在示例4的十进制转二进制函数中,就用上了加号。
示例7:将Student表的stu_name列和stu_enter_score列放在同样列显示,列名为score
Student表的多寡如图所示
必发88手机客户端 12
实行下列语句

SELECT stu_name+CAST(stu_enter_score AS VARCHAR(3)) AS score FROM Student

施行结果如图所示
必发88手机客户端 13

注:stu_enter_score列数据类型为int,加号只对字符串类型数占领效,因而要用CAST函数将stu_enter_score的数据类型调换为varchar(3),那样技巧促成字符串拼接。

1.3.11.     DML触发器

DML触发器是当数据库服务器中爆发多少操作语言
(DML) 事件时要试行的操作。DML 事件包蕴对表或视图发出的 UPDATE、INSERT 或
DELETE 语句。遵照事件区别命名法规使用前缀举办区分,格式为 [u|i|d] +
[表名|视图名]

示例:uEmployee

  iEmployee

      dEmployee

除此以外一种格局为,

AFTER 触发器:TR_表名_[末端插入加I,修改加U,删除加D]。

INSTEAD OF 触发器:TR_表名或视图名_OF[末端插入加I,修改加U,删除加D]

1.3.10.    
客户定义数据类型
运用帕斯Carl样式命名,命名格式为[自定义数据类型名称]。
示例:Flag
      NameStyle

2.7.一元运算符

一元运算符只对一个表明式实践操作,该表明式能够是数字数据类型中的任何一种数据类型。SQL
Server 二〇一〇提供的一元运算符包括正(+),负(-),位反(~)。
示例8:声澳优个int数据类型变量@num并赋值,对该变量做正负位反操作。
推行下列语句

DECLARE @num INT
SET @num=45
SELECT +@num AS 正,-@num AS 负,~@num AS 位反
GO

结果如图所示
必发88手机客户端 14

注:位反操作符用于取二个数的补数,只能用于整数。

1.3.12.     DDL触发器

响应各样数码定义语言
(DDL) 事件而振奋。那几个事件主要与以第一字 CREATE、ALTE索罗德 和 DROP 开始的
Transact-SQL 语句对应。实行 DDL 式操作的体系存款和储蓄进程也足以激起 DDL
触发器。

行使Camel样式命名,命名单词能够描述DDL触发器作用。

示例:

CREATE TRIGGER safety

ON DATABASE

FOR DROP_TABLE, ALTER_TABLE

AS

   PRINT ‘You must
disable Trigger “safety” to drop or alter tables!’

   ROLLBACK ;

其余一种方法为增多ddl前缀,

示例:

CREATE TRIGGER [ddlDatabaseTriggerLog]

ON DATABASE

FOR DDL_DATABASE_LEVEL_EVENTS

AS

1.3.11.    
DML触发器
DML触发器是当数据库服务器中发生多少操作语言 (DML)
事件时要举办的操作。DML 事件包含对表或视图发出的 UPDATE、INSERT 或 DELETE 语句。依据事件不一致命名准则使用前缀进行区分,格式为 [u|i|d] + [表名|视图名]
示例:uEmployee 
  iEmployee
      dEmployee

2.8.运算符的事先级

优先级 运算符
1 ~(位反)
2 *(乘),/(除),%(取模)
3 +(正),-(负),+(加),+(连接),-(减),&(位与)
4 =,>,<,>=,<=,<>,!=,!>,!<(比较运算符)
5 ^(位异或),位或(符号打不出来,前面有,自己翻)
6 NOT
7 AND
8 ALL,ANY,BETWEEN,IN,LIKE,ALL,SOME
9 =(赋值)

当表达式中的运算符有相同的先行级时,根据它们在表达式中的地方,一元运算符按从右往左运算,二元运算符(对八个表明式成效的运算符)按从左往右运算。
示例9:验证运算符优先级
实施下列语句

DECLARE @result INT,@num INT
SET @num=45
SET @result=@num+(~@num)*4-@num/(~@num)
SELECT @result AS result
GO

结果如图所示
必发88手机客户端 15
测算代码中的表明式
@result=@num+(~@num)4-@num/(~@num)
=@num+(-46)
4-@num/(-46)
=45+(-46)4-45/(-46)
=45+(-46)
4
=-139

1.3.13.     主键、外键关系和目录

主键:
PK_[表名称]_[主键];如果是整合主键,使用PK_[表名]_[主键1]_[主键2]。

示例:PK_Store_CustomerID

 
PK_StoreContact_CustomerID_ContactID

外键关系:FK_[从表名称]_[主表名称]_[外键列名称]。

示例:FK_StoreContact_Store_CustomerID

聚焦索引:PK_[表名称]_[主键];假如是构成主键,使用PK_[表名]_[主键1]_[主键2]。

示例:PK_Store_CustomerID

 
PK_StoreContact_CustomerID_ContactID

独一非集中索引:AK_[表名称]_[列名称]。

示例:AK_Store_rowguid

不独一非集中索引:PK_[表名称]_[列名称]。

示例:IX_Store_SalesPersonID


XML索引:PXML_[表名称]_[Xml类型列名称]。

示例:PXML_Store_Demographics

备考:以上命名参谋Sql
Server 二零零五演示数据库,日常只需设计器自动生成,没有须要相当修改。

另外一种方法为,
AFTER 触发器:TR_表名_[末端插入加I,修改加U,删除加D]。
INSTEAD OF 触发器:TR_表名或视图名_OF[末端插入加I,修改加U,删除加D]

3.决定语句

1.4.参数命名

1.3.12.    
DDL触发器
一呼百应各样数码定义语言 (DDL) 事件而激情。这么些事件非同日常与以第一字 CREATE、ALTE普拉多 和 DROP 开始的 Transact-SQL
语句对应。实践 DDL 式操作的种类存款和储蓄进度也得以激起 DDL 触发器。
行使Camel样式命名,命名单词能够描述DDL触发器效用。
示例:
CREATE TRIGGER safety 
ON DATABASE 
FOR DROP_TABLE, ALTER_TABLE 
AS 
   PRINT ‘You
must disable Trigger “safety” to drop or alter tables!’ 
   ROLLBACK ;

3.1.BEGIN END语句块

BEGIN END能够定义SQL
Server语句块,使这个言辞作为一组语句实行,允许语句嵌套。比方请见示例4

1.4.1. 数据列参数

命名格式为 @ +
[列名称]。

示例:@EmployeeID

在列名不符合帕斯Carl样式时(开始的一段时代遗留系统),比方使用成套大写的列名称,或应用“_”实行连接的字段名称,参数名称定义使用
@ + [列名称],这里的列名称尽量相符Pascal样式命名。

别的一种方法为加多ddl前缀,
示例:
CREATE TRIGGER [ddlDatabaseTriggerLog] 
ON DATABASE 
FOR DDL_DATABASE_LEVEL_EVENTS 
AS

3.2.IF ELSE语句块

用以钦赐T-SQL语句的实行标准,若条件为真,则执行典型表明式前边的言语,条件为假时,能够试用ELSE关键字钦命要实施的T-SQL语句。比方请见示例4

1.4.2. 非数据列参数

在参数一点都不大概跟列名称举行关联时,使用可以浮现该参数功用的匈牙利(Hungary)语单词或单词组合,
接纳帕斯Carl样式命名。

示例:@ErrorID

      @Flag

1.3.13.    
主键、外键关系和目录
主键: PK_[表名称]_[主键];假设是结合主键,使用PK_[表名]_[主键1]_[主键2]。
示例:PK_Store_CustomerID
  PK_StoreContact_CustomerID_ContactID
外键关系:FK_[从表名称]_[主表名称]_[外键列名称]。
示例:FK_StoreContact_Store_CustomerID

3.3.CASE分支语句

示例10:将Student表的学习者,性别和原籍打字与印刷出来,供给籍贯只可以展现本省,省外或自治区。
Student表的数目如图所示
必发88手机客户端 16
实行下列语句

SELECT stu_name AS 姓名,stu_sex AS 性别,
(CASE stu_native_place
WHEN '浙江' THEN '省内'
WHEN '内蒙古' THEN '自治区'
WHEN '西藏' THEN '自治区'
WHEN '宁夏' THEN '自治区'
WHEN '新疆' THEN '自治区'
WHEN '广西' THEN '自治区'
ELSE '省外'
END) AS 籍贯 
FROM Student

结果如图所示
必发88手机客户端 17

1.5.常见命名

聚焦索引:PK_[表名称]_[主键];假诺是结合主键,使用PK_[表名]_[主键1]_[主键2]。
示例:PK_Store_CustomerID 
  PK_StoreContact_CustomerID_ContactID

3.4.WHILE语句

用以安装双重实施T-SQL语句或语句块的口径。
示例11:用“*”在显示器上输出三个肥瘦为9的菱形。
实践下列语句

DECLARE @width int,@j int
SET @width=9--@width为菱形的最大宽度
SET @j=1--@j表示每行打印的“*”符号的个数
WHILE @j<=@width
BEGIN
PRINT SPACE((@width-@j)/2)+REPLICATE('*',@j)--SPACE函数打印n个空字符,REPLICATE打印n个特定字符串
SET @j=@j+2
END
SET @j=@width-2
WHILE @j>0
BEGIN
PRINT SPACE((@width-@j)/2)+REPLICATE('*',@j)
SET @j=@j-2
END

结果如图所示
必发88手机客户端 18

1.5.1. 常用字段命名

这里的常用字段是指在建表时频仍使用的表名或列名,下表对常用字段进展提议性定义,

列名称         
数据类型             表达

CreatedDate    
datetime                纪录成立日期,日常接纳GETDATE()自动生成

ModifiedDate       
datetime                纪录最终修改日期,第三遍使用GETDATE()

DeletedDate    
datetime                记录删除(标识删除)日期

StartDate      
datetime                初步日期

EndDate        
datetime                甘休日期

StartTime      
datetime                开首时间

End提姆e        
datetime                停止时间

rowguid        
uniqueidentifier        唯一标记行的ROWGUIDCOL号,用于扶助合併复制

ID             
int                 使用ID替代Id或id。平日为自增加主键列

ParentID           
int                 父ID

Status         
int                 状态

独一非聚焦索引:AK_[表名称]_[列名称]。
示例:AK_Store_rowguid

3.5.WAITFOEscort延缓语句

WAITFO猎豹CS6延迟语句能够让在它以后的言语在多个点名的时刻也许时间间距后实施,能够悬挂起批管理,存款和储蓄进程或业务的执行。
示例12:在有些时刻点查询Student表学号为20180101的上学的小孩子消息

BEGIN
WAITFOR TIME '15:03'--在15点03分查询
SELECT * FROM Student
WHERE stu_no='20180101'
END

示例13:在3分钟后查询Student表学号为20180102的学员音信

BEGIN
WAITFOR DELAY '00:03'--在3分钟后查询
SELECT * FROM Student
WHERE stu_no='20180102'
END

必发88手机客户端 19

SQL编写

不独一非集中索引:PK_[表名称]_[列名称]。
示例:IX_Store_SalesPersonID

3.6.RETUKugaN无条件退出语句

该语句表示无条件截至查询,批管理或存款和储蓄进程的执行。存款和储蓄进度和批管理RETUCRUISERN语句前边的话语都不再试行。当在存款和储蓄进度中动用该语句时,能够钦命再次回到给调用应用程序、批管理或进度的整数值。假使RETUPAJERON未钦点重返值,则存款和储蓄进度的重临值是0

3.1.大小写

大写T-SQL
语言的保有主要字,谓词和系统函数。变量名称及游标名称使用帕斯Carl样式。数据类型定义使用一切大写。

示例:DECLARE @LastName nvarchar(32);

主 XML索引:PXML_[表名称]_[Xml类型列名称]。
示例:PXML_Store_Demographics

3.7.GOTO跳转语句

该语句使T-SQL批管理的施行跳转至钦命标签。由于该语句破坏结构化语句的布局,尽量少用
示例13:将GOTO作为分支机制
推行下边语句

DECLARE @Counter int;  
SET @Counter = 1;  
WHILE @Counter < 10  
BEGIN   
    SELECT @Counter  
    SET @Counter = @Counter + 1  
    IF @Counter = 4 GOTO Branch_One --Jumps to the first branch.  
    IF @Counter = 5 GOTO Branch_Two  --This will never execute.  
END  
Branch_One:  
    SELECT 'Jumping To Branch One.'  
    GOTO Branch_Three; --This will prevent Branch_Two from executing.  
Branch_Two:  
    SELECT 'Jumping To Branch Two.'  
Branch_Three:  
SELECT 'Jumping To Branch Three.';

结果如图所示
必发88手机客户端 20
当Counter=4时,实践GOTO语句输出Branch
One,试行完那几个讲话之后就打破了WHILE循环,接着执行Branch_One语句中的GOTO,输出Branch
Three,结束。

注:在WHILE循环中接纳GOTO会打破循环。

示例14:用GOTO语句完结示例11中打印菱形的功力
实行下列语句

DECLARE @width int,@j int,@i int
SET @width=9--@width为菱形的最大宽度
SET @j=1--@j表示每行打印的“*”符号的个数
SET @i=1--@i表示下一行打印第i行
Set3:PRINT SPACE((@width-@j)/2)+REPLICATE('*',@j)--SPACE函数打印n个空字符,REPLICATE打印n个特定字符串
SET @i=@i+1
IF @i<=(@width+1)/2
GOTO Set1
ELSE
GOTO Set2
Set1:
SET @j=@j+2
GOTO Set3
Set2:
SET @j=@j-2
IF @j>=1
GOTO Set3

结果如图所示
必发88手机客户端 21

3.2.使用“;”

行使“;”作为
Transact-SQL
语句终止符。即使分号不是不可或缺的,但运用它是一种好的习贯。

示例:

USE AdventureWorks;

GO

DECLARE @find varchar(30);

SET @find = ‘Man%’;

SELECT LastName, FirstName,
Phone

FROM Person.Contact

WHERE LastName LIKE @find;

备考:以上命名参照他事他说加以考察Sql Server
二零零五演示数据库,平常只需设计器自动生成,无需非常修改。

3.8.TEvoqueY CATCH错误管理语句

假使TENVISIONY块内部产生错误,会将决定传递给CATCH块内的语句组。TEvoqueY
CATCH构造捕捉全部严重等级大于10但不会结束数据库连接的荒唐。
示例15:TRY CATCH的示例
实施下列语句

BEGIN TRY
SELECT * FROM Student
SELECT 120/0 FROM Student
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE() AS '错误信息'
END CATCH

实施结果如图所示
必发88手机客户端 22
语句中3个select语句全体都实施了。假如把报错的select语句放到不荒谬的select语句前面,平时的select语句仍是可以不能够施行呢?实施下列语句

BEGIN TRY
SELECT 120/0 FROM Student
SELECT * FROM Student
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE() AS '错误信息'
END CATCH

结果如图所示
必发88手机客户端 23
不奇怪select语句无法执行。T大切诺基Y
CATCH语句的逻辑是,一旦T纳瓦拉Y语句块中出现难点讲话,立即跳转到CATCH语句块,TTucsonY语句块接下去的讲话不再举办。

3.3.存款和储蓄格式

尽或许利用Unicode数据存款和储蓄格式,进步可移植性和宽容性,实际利用中尽量选用nchar、nvarchar、ntext替代char、varchar、text。

1.4.
参数命名
1.4.1. 
数据列参数
命名格式为 @ + [列名称]。
示例:@EmployeeID

4.常用函数

3.4.类型选择

举例字符具备刚毅的尺寸,使用nchar替代nvarchar;char替代varchar。

在独有八个大概数值时,使用bit代替int或smallint。

在SQL Server
2005中,使用nvarchar(MAX)代替ntext;varchar(MAX)代替text;varbinary(MAX)代替image。

在特别的数据表结构中可思考xml数据类型,达到事半工倍的意义。

在列名不切合帕斯Carl样式时(开始的一段时代遗留系统),比如利用任何大写的列名称,或利用“_”进行三番五次的字段名称,参数名称定义使用
@ + [列名称],这里的列名称尽量适合帕斯Carl样式命名。

4.1.数据类型调换函数

私下认可境况下SQL
Server会对部分数据类型实行自动调换,这种转移称为隐式转变。遇到非常的小概活动调换,则供给用CAST()函数和CONVERT()函数转变,这种转移称为显式调换。CAST()函数和CONVERT()函数的机能是均等的,CAST函数更便于选择,CONVERT函数的优点是能够钦点日期和数值格式。
示例16:将Student表中的学号转变为日期格式
上面两句语句的功力是平等的,执行下列语句

SELECT stu_name,CAST(stu_no AS DATE) AS 学号转换成日期,stu_enter_score,stu_birthday FROM Student
SELECT stu_name,CONVERT(DATE,stu_no) AS 学号转换成日期,stu_enter_score,stu_birthday FROM Student

结果如图所示
必发88手机客户端 24
示例17:用CONVERT()函数将stu_birthday转形成钦命格式的日子
推行下列语句

SELECT stu_name,CONVERT(VARCHAR(20),stu_birthday,101) FROM Student
--CONVERT函数将DATE类型的stu_birthday字段转化为字符串,并限定了样式,代码101

结果如图所示
必发88手机客户端 25

注:在上述代码中,CONVERT(DATE,stu_birthday,101)这么写是没用的。101格式码只对日期格式转变为字符串有效,其余格式转变为日期格式是低效的。

此外常用函数太简单了此地不写了,略。

3.5.默认值

在建设构造数量表时,尽量采纳暗中同意值替代NULL值。譬喻设置CreatedDate列暗中同意值为GETDATE()。在使得的情事下设置字段为不允许空。

1.4.2. 
非数据列参数
在参数无法跟列名称举办关联时,使用能够展现该参数效能的土耳其共和国(Türkiye Cumhuriyeti)语单词或单词组合,
选择帕斯Carl样式命名。
示例:@ErrorID
      @Flag

3.6.字段长度

一味钦点字符数据类型的长短,并确定保证允许客商恐怕需求的最大字符数,制止超过最大尺寸时出现字符错失现象。对于字符型数据,提出采纳2的n次方来定义数据长度。

示例:nvarchar(32)

  varchar(64)

1.5.
广大命名
1.5.1. 
常用字段命名
此间的常用字段是指在建表时往往利用的表名或列名,下表对常用字段实行建议性定义,

3.7.使用“’”

在 T-SQL
代码中为字符常量使用单引号,防止选用双引号。

列名称          数据类型             表达
CreatedDate     datetime               
纪录创制日期,经常接纳GETDATE()自动生成
ModifiedDate        datetime               
纪录最终修改日期,第一遍选用GETDATE()
DeletedDate     datetime               
记录删除(标识删除)日期
StartDate       datetime               
以前几日期
EndDate         datetime               
截至日期
StartTime       datetime               
早先时间
EndTime         datetime               
甘休时间
rowguid         uniqueidentifier       
独一标志行的ROWGUIDCOL号,用于扶助合併复制
ID              int                
使用ID取代Id或id。经常为自增加主键列
ParentID            int                
父ID
Status          int                
状态

3.8.语句缩进

二个嵌套代码块中的语句使用多少个空格的缩进。使用Microsoft
SQL Server Management Studio
,选用“工具”菜单,展开“选项”菜单,在选择对话框中选择文本编辑器->纯文本->制表符,选中“插入空格单选框”,设置“制表符大小”为4,缩进大小为“4”。

3. 
SQL编写
3.1.
大小写
大写T-SQL
语言的有所首要字,谓词和系统函数。变量名称及游标名称使用帕斯Carl样式。数据类型定义使用成套大写。
示例:DECLARE @LastName nvarchar(32);

3.9.语句换行

建议SQL代码每行以重大字或“’”开始。

示例:

SELECT [ShiftID]

      ,[Name]

      ,[StartTime]

      ,[EndTime]

      ,[ModifiedDate]

  FROM [AdventureWorks].[HumanResources].[Shift]

3.2.
使用“;”
采纳“;”作为 Transact-SQL
语句终止符。即便分号不是少不了的,但使用它是一种好的习于旧贯。
示例:
USE AdventureWorks;
GO
DECLARE @find varchar(30);
SET @find = ‘Man%’;
SELECT LastName, FirstName, Phone
FROM Person.Contact
WHERE LastName LIKE @find;

3.10.   语句分割

动用贰个(并非四个)空行分隔
T-SQL 代码的逻辑块。

3.3.
囤积格式
尽心竭力利用Unicode数据存款和储蓄格式,进步可移植性和宽容性,实际运用中尽量选择nchar、nvarchar、ntext代替char、varchar、text。

3.11.   使用“*”

尽量制止在别的代码中使用
“SELECT *”。

3.4.
门类选取
假诺字符具备显著的尺寸,使用nchar代替nvarchar;char替代varchar。
在独有三个只怕数值时,使用bit替代int或smallint。
在SQL Server 2005中,使用nvarchar(MAX)代替ntext;varchar(MAX)代替text;varbinary(MAX)代替image。
在特别规的数据表结构中可思考xml数据类型,到达事半工倍的法力。

3.12.   表名别称

表名外号要轻易,但意义要硬着头皮明显。平日使用大写的表名作为小名,使用
AS 关键字钦定表或字段的别名。

3.5.
默认值
在确立数量表时,尽量选取暗许值替代NULL值。举例设置CreatedDate列私下认可值为GETDATE()。在使得的情形下设置字段为不相同意空。

3.13.   类型转变

毫不依附任何隐式的数据类型转变,不要假定
T-SQL
会开展必要的转移。举个例子,把数字变量付与字符值。相反,在为变量赋值或相比较值以前,应使用方便的
CONVERT 函数使数据类型相相称。

3.6.
字段长度
始终内定字符数据类型的长短,并保管允许客商只怕要求的最大字符数,幸免过量最大尺寸时出现字符错失现象。对于字符型数据,提议利用2的n次方来定义数据长度。
示例:nvarchar(32)
  varchar(64)

3.14.   数值比较

毫无将空的变量值直接与比较运算符(符号)相比较。假设变量大概为空,应使用
IS NULL 或 IS NOT NULL 进行相比,大概使用 ISNULL 函数。

3.7.
使用“’”
在 T-SQL 代码中为字符常量使用单引号,幸免接纳双引号。

3.15.   排序

永不要信任 SELECT
语句会按任何特定顺序重回行,除非在 O讴歌MDXDE奥迪Q3 BY 子句中钦赐了种种。平常,应将
O帕拉梅拉DELacrosse BY 子句与 SELECT
语句一同利用。可预言的依次(即便不是最平价的)比不足预言的次第强,极度是在支付或调节和测量检验过程中。在重回行的顺序无关首要的情形下,能够忽略O卡宴DE大切诺基 BY ,减弱能源开辟。

3.8. 语句缩进
一个嵌套代码块中的语句使用多个空格的缩进。使用Microsoft SQL Server
Management Studio
,选用“工具”菜单,打开“选项”菜单,在增选对话框中采纳文本编辑器->纯文本->制表符,选中“插入空格单选框”,设置“制表符大小”为4,缩进大小为“4”。

3.16.   Unicode字符串

在Unicode字符前边使用N前缀,幸免引起数据的不均等。

示例:


Assumes the default code page is not Greek

CREATE TABLE #t1 (c1 nchar(1))

INSERT #t1 VALUES(N’Ω’)

INSERT #t1 VALUES(‘Ω’)

SELECT * FROM
#t1

出口结果:

c1  


Ω

O

3.9. 语句换行
建议SQL代码每行以重大字或“’”初步。
示例:
SELECT [ShiftID]
      ,[Name]
      ,[StartTime]
      ,[EndTime]
      ,[ModifiedDate]
  FROM [AdventureWorks].[HumanResources].[Shift]

3.17.   BEGIN…END 块

在SQL代码快中尽量利用BEGIN…END
语句块,提升代码可阅读性。

3.10.  
语句分割
动用贰个(并非四个)空行分隔 T-SQL
代码的逻辑块。

3.18.   TRY块

在SQL Server
二零零五中对有的可能施行停业的口舌尽量使用TCRUISERY块。Transact-SQL
语句组能够分包在 TSportageY 块中,假若 T猎豹CS6Y 块内部爆发错误,则会将决定传递给
CATCH 块中富含的另一个语句组。

示例:

BEGIN TRY

    SQL 语句组1

END TRY

BEGIN CATCH

    SQL 语句组2

END CATCH;

3.11.  
使用“*”
尽量防止在任何代码中使用 “SELECT *”。

3.19.   TOP子句

在SQL Server
二零零六中提升了TOP的行使,尽量选择TOP(变量)来压缩SQL拼串现象。

3.12.  
表名别称
表名外号要轻易,但意义要尽量明确。平日使用大写的表名作为小名,使用 AS 关键字钦点表或字段的别称。

3.20.   TRANSACTION编写

假如在例程中接纳四个数据库修改语句,包蕴在二个生生不息中屡次实践贰个口舌,就应思虑声分明式事务。在SQL
SERAV4VE索罗德 2007 中,扩张了TPRADOY块可进行很好的选用。

实例:

   
BEGIN TRY

        BEGIN TRANSACTION;

        UPDATE [HumanResources].[Employee]

        SET [Title] = @Title

            ,[HireDate] = @HireDate

            ,[CurrentFlag] = @CurrentFlag

        WHERE [EmployeeID] = @EmployeeID;

        INSERT INTO
[HumanResources].[EmployeePayHistory]

            ([EmployeeID]

            ,[RateChangeDate]

            ,[Rate]

            ,[PayFrequency])

        VALUES (@EmployeeID, @RateChangeDate, @Rate,
@PayFrequency);

        COMMIT TRANSACTION;

    END TRY

    BEGIN CATCH

        — Rollback any active or uncommittable
transactions before

        — inserting information in the
ErrorLog

        IF @@TRANCOUNT > 0

        BEGIN

            ROLLBACK TRANSACTION;

        END

        EXECUTE [必发88手机客户端,dbo].[uspLogError];

   
END CATCH;

3.13.  
类型调换
永不依附任何隐式的数据类型转变,不要假定 T-SQL
会开展须求的转移。举个例子,把数字变量授予字符值。相反,在为变量赋值或相比较值从前,应使用方便的 CONVERT 函数使数据类型相相配。

3.21.   存储进程

在编排存款和储蓄进度时,使用PROCEDURE 替代 PROC 简写。

示例:CREATE PROCEDURE [dbo].[积攒进度名字]

3.14.  
数值比较
绝不将空的变量值直接与比较运算符(符号)对比。假若变量恐怕为空,应使用 IS NULL 或 IS NOT NULL 举行相比,或然应用 ISNULL 函数。

代码注释

3.15.  
排序
永不要依据 SELECT 语句会按任何特定顺序重回行,除非在 O福睿斯DE宝马X5 BY 子句中钦赐了各样。经常,应将 O奥迪Q5DE途睿欧 BY 子句与 SELECT 语句一齐利用。可预言的相继(即便不是最利于的)比不足预感的一一强,越发是在支付或调节和测量试验进程中。在再次回到行的各类无关首要的动静下,能够忽略 OEnclaveDE奥迪Q5 BY ,减弱财富开采。

4.1.代码底部注释

在SQL代码块(sql文件或存款和储蓄进程)的底部实行评释,标记创造人(Author)、创始日期(Create date)、修改音信(Modify [n])。

格式:

3.16.  
Unicode字符串
在Unicode字符前边使用N前缀,防止引起数据的区别等。
示例:
— Assumes the default code page is
not Greek
CREATE TABLE #t1 (c1 nchar(1))
INSERT #t1 VALUES(N’Ω’)
INSERT #t1 VALUES(‘Ω’)
SELECT * FROM #t1
输出结果:
c1   
—- 
Ω
O


Author:      <Author,,Name>

— Create
date: <Create Date,,>


Description: <Description,,>

— Modify
[n]:  < Modifier,Date, Description >

3.17.   BEGIN…END 块
在SQL代码快中尽量利用BEGIN…END 语句块,升高代码可阅读性。

示例:

3.18.  
TRY块
在SQL Server
二零零七中对一部分恐怕实行停业的言语尽量选拔T中华VY块。Transact-SQL
语句组能够富含在 TLacrosseY 块中,要是 T昂科威Y 块内部产生错误,则会将调节传递给
CATCH 块中带有的另贰个语句组。
示例:
BEGIN TRY
    SQL 语句组1
END TRY
BEGIN CATCH
    SQL 语句组2
END CATCH;


Author:      Zhanghaifeng

— Create
date: 2006-12-25


Description: H3000报关单回执管理

— Modify
[1]:  郑佐,
二零零六-12-31, 简化逻辑判别流程

— Modify
[2]:  郑佐,
二零零六-01-20, 更新规范推断

3.19.  
TOP子句
在SQL Server
2007中巩固了TOP的接纳,尽量使用TOP(变量)来减弱SQL拼串现象。

注:日期格式使用
yyyy-MM-dd。Modify [n] n代表修改序号,从1起首,每回修改加1。

3.20.  
TRANSACTION编写
只要在例程中选取四个数据库修改语句,满含在一个生生不息中反复实践三个话语,就应考虑声分明式事务。在SQL
SE途达VEEvoque 二零零六 中,扩充了T凯雷德Y块可进行很好的行使。
实例:
    BEGIN TRY
        BEGIN TRANSACTION;

4.2.TRANSACTION注释

提议在种种业务的起来实行注明,表明该事情的效应。

— <
Modifier,Date, Description >

BEGIN TRANSACTION;

        UPDATE [HumanResources].[Employee] 
        SET [Title] = @Title 
            ,[HireDate] = @HireDate 
            ,[CurrentFlag] = @CurrentFlag 
        WHERE [EmployeeID] = @EmployeeID;

附录A  命名法规

大面积命名法规有各种体制:完全大写、完全小写、Pascal大小写和 Camel 大小写。

        INSERT INTO [HumanResources].[EmployeePayHistory] 
            ([EmployeeID]
            ,[RateChangeDate]
            ,[Rate]
            ,[PayFrequency]) 
        VALUES (@EmployeeID, @RateChangeDate, @Rate, @PayFrequency);

5.1.Pascal 大小写

整合标志符的各类单词的首字母大写,别的字母小写的书写约定。对于缩写的双字母单词,须求全副大写。

例如:ApplicationException

      ID

        COMMIT TRANSACTION;
    END TRY
    BEGIN CATCH
        — Rollback any active or
uncommittable transactions before
        — inserting information in the
ErrorLog
        IF @@TRANCOUNT > 0
        BEGIN
            ROLLBACK TRANSACTION;
        END

5.2.Camel 大小写

标志符的首字母小写,种种前边连接的单词的首字母大写,别的字母小写的书写约定。对于缩写的双字母单词,供给它们出现在标志符首部时整个大写,否则一切大写。

例如:applicationException

      id

        EXECUTE [dbo].[uspLogError];
    END CATCH;

5.3.匈牙利(Hungary)命名法

匈牙利(Hungary)命名法由匈牙利(Magyarország)程序猿发明,他在微软做事了连年,此命名法正是经过微软的各个成品和文书档案传出来。相当多有经历的程序猿,不管他们用的是哪门语言,都或多或少在选择它。

主干尺度:变量名 = 属性
+ 类型 + 对象描述

即三个变量名是由三部分新闻整合,这样,程序猿很轻便精晓变量的花色、用途,并且便于回想。

3.21.  
存款和储蓄进度
在编制存款和储蓄进度时,使用PROCEDURE 替代 PROC 简写。
示例:CREATE PROCEDURE [dbo].[积存进度名字]

附录B  参照他事他说加以考察财富

4. 
代码注释
4.1.
代码尾部注释
在SQL代码块(sql文件或存款和储蓄进度)的底部举办解说,标注创制人(Author)、创始日期(Create date)、修改音信(Modify [n])。
格式:
— =============================================
— Author:     
<Author,,Name>
— Create date: <Create
Date,,>
— Description:
<Description,,>
— Modify [n]:  < Modifier,Date,
Description >
— =============================================
示例:
— ================================================
— Author:     
Zhanghaifeng
— Create date:
2006-12-25
— Description:
H两千报关单回执处理
— Modify [1]:  郑佐, 2007-12-31,
简化逻辑推断流程
— Modify [2]:  郑佐, 2007-01-20,
更新标准决断
— ================================================
注:日期格式使用
yyyy-MM-dd。Modify [n] n代表修改序号,从1起来,每回修改加1。

6.1.Microsoft SQL Server 二零零六 联机丛书

http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=BE6A2C5D-00DF-4220-B133-29C1E0B6585F

4.2.
TRANSACTION注释
提出在各类职业的起来实行批注,表明该事情的效应。
— < Modifier,Date, Description
>
BEGIN TRANSACTION;

6.2.SQL Server 二零零六演示数据库

AdventureWorks

AdventureWorksDW

5. 
附录A 命名法则
大规模命名准绳有各类体裁:完全大写、完全小写、Pascal 大小写和 Camel
大小写。
5.1.
Pascal 大小写
构成标记符的各种单词的首字母大写,别的字母小写的书写约定。对于缩写的双字母单词,供给全部大写。
例如:ApplicationException
      ID

6.3.编辑可移植的 Transact-SQL 代码

http://www.microsoft.com/china/msdn/library/data/sqlserver/USsqldnsqldevdev\_06112004L.mspx

5.2.
Camel 大小写
标记符的首字母小写,每一种后边连接的单词的首字母大写,别的字母小写的书写约定。对于缩写的双字母单词,要求它们出今后标记符首部时整个大写,不然一切大写。
例如:applicationException
      id

6.4.T-SQL 编码标准

5.3.
匈牙利(Hungary)命名法
匈牙利(Magyarország)命名法由匈牙利(Magyarország)工程师发明,他在微软办事了连年,此命名法就是经过微软的各个产品和文书档案传出来。相当多有经历的工程师,不管他们用的是哪门语言,都或多或少在使用它。

主干尺度:变量名 = 属性 + 类型 + 对象描述

即二个变量名是由三片段消息整合,那样,技师很轻松精通变量的品类、用途,而且便于回忆。