Transact-SQL语言 (2).ppt
《Transact-SQL语言 (2).ppt》由会员分享,可在线阅读,更多相关《Transact-SQL语言 (2).ppt(105页珍藏版)》请在三一办公上搜索。
1、第4章 Transact-SQL语言,4.1 数据定义语言,数据定义语言(DDL)是指用来定义和管理数据库以及数据库中各种对象的语句,这些语句包括CREATE、ALTER 和DROP 等。在SQLServer 2005中,数据库对象包括表、视图、触发器、存储过程、规则、默认、用户自定义的数据类型等。这些对象的创建、修改和删除等都可以通过使用CREATE,ALTER,DROP等语句来完成。,4.1 数据定义语言,例4-1 创建数据库表/*下面的例子将创建表S。*/CREATE TABLE S(sno char(10)NOT NULL/*学号字段*/CONSTRAINT PK_sno PRIMAR
2、Y KEY CLUSTERED/*主键约束*/CHECK(sno like 313005010-90-9)/*检查约束*/,sname char(8)NULL,/*姓名字段*/sex char(2)NULL,/*性别字段*/age int NULL,/*年龄字段*/dept varchar(20)NULL/*系别字段*/),补充知识:1.clustered,我们可以把索引理解为一种特殊的目录。微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索(nonclustered index,也称非聚类索引、非簇集索引)。下面,我们举例来
3、说明一下聚集索引和非聚集索引的区别:,其实,我们的汉语字典的正文本身就是一个聚集索引。比如,我们要查“安”字,就会很自然地翻开字典的前几页,因为“安”的拼音是“an”,而按照拼音 排序汉字的字典是以英文字母“a”开头并以“z”结尾的,那么“安”字就自然地排在字典的前部。如果您翻完了所有以“a”开头的部分仍然找不到这个字,那 么就说明您的字典中没有这个字;同样的,如果查“张”字,那您也会将您的字典翻到最后部分,因为“张”的拼音是“zhang”。也就是说,字典的正文部分 本身就是一个目录,您不需要再去查其他目录来找到您需要找的内容。我们把这种正文内容本身就是一种按照一定规则排列的目录称为“聚集索引
4、”。,如果您认识某个字,您可以快速地从自典中查到这个字。但您也可能会遇到您不认识的字,不知道它的发音,这时候,您就不能按照刚才的方法找到您要查的 字,而需要去根据“偏旁部首”查到您要找的字,然后根据这个字后的页码直接翻到某页来找到您要找的字。但您结合“部首目录”和“检字表”而查到的字的排序 并不是真正的正文的排序方法,比如您查“张”字,我们可以看到在查部首之后的检字表中“张”的页码是672页,检字表中“张”的上面是“驰”字,但页码却 是63页,“张”的下面是“弩”字,页面是390页。很显然,这些字并不是真正的分别位于“张”字的上下方,现在您看到的连续的“驰、张、弩”三字实际上 就是他们在非聚集
5、索引中的排序,是字典正文中的字在非聚集索引中的映射。我们可以通过这种方式来找到您所需要的字,但它需要两个过程,先找到目录中的结 果,然后再翻到您所需要的页码。我们把这种目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”。,进一步引申一下,我们可以很容易的理解:每个表只能有一个聚集索引,因为目录只能按照一种方法进行排序。,2.什么是检查约束?,检查约束是一个规则,它确认一个SQL Server表中某条记录中的数据可接受的字段值。检查约束帮助执行域完整性。域完整性定义了一个数据库表中字段的有效值。检查约束可以验证一个单独字段或一些字段的域完整性。你对一个单独的字段可以有多个检查完整性。假如
6、被插入或更新的数据违反了一个检查约束,那么数据库引擎将不答应这个插入或更新的操作发生。,4.1 数据定义语言,例4-2 修改S表,增加一个班号列程序清单如下:ALTER TABLE SADDCLASS_NO CHAR(6),4.1 数据定义语言,例4-3删除S表程序清单如下:DROP table S,4.2 数据操纵语言(DML),数据操纵语言是指用来查询、添加、修改和删除数据库中数据的语句,这些语句包括SELECT、INSERT、UPDATE、DELETE等。将在第5章详细讲解SELECT等语句的语法及实例。,4.3 数据控制语言,数据控制语言(DCL)是用来设置或更改数据库用户或角色权限的
7、语句,包括GRANT,DENY,REVOKE等语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行数据控制语言。,GRANT语句,1、语句权限与角色的授予 SQL语言使用GRANT语句为用户授予语句权限的语法格式为:GRANT|,|TO|PUBLIC,|WITH ADMIN OPTION其语义为:将指定的语句权限授予指定的用户或角色。其中:(1)PULBIC代表数据库中的全部用户;(2)WITH ADMIN OPTION为可选项,指定后则允许被授权的用户将指定的系统特权或角色再授予其他用户或角色。,GRANT语句,1
8、、语句权限与角色的授予 例4-17给用户 Mary 和 John 以及 Windows NT 组CorporateBobJ 授予多个语句权限。程序清单如下:GRANT CREATE DATABASE,CREATE TABLETO Mary,John,CorporateBobJ 例3-18 为用户ZhangYiLin授予CREATE TABLE的语句权限。程序清单如下:GRANT CREATE TABLETO ZhangYiLin,GRANT语句,2、对象权限与角色的授予 数据库管理员拥有系统权限,而作为数据库的普通用户,只对自己创建的基本表、视图等数据库对象拥有对象权限。如果要共享其他的数据库
9、对象,则必须授予他一定的对象权限。同语句权限的授予类似,SQL语言使用GRANT语句为用户授予对象权限,其语法格式为:GRANT ALL|(列名,列名),ON TO|PUBLIC,|WITH ADMIN OPTION,其语义为:将指定的操作对象的对象权限授予指定的用户或角色。其中:(1)ALL代表所有的对象权限。(2)列名用于指定要授权的数据库对象的一列或多列。如果不指定列名,被授权的用户将在数据库对象的所有列上均拥有指定的特权。实际上,只有当授予INSERT、UPDATE权限时才需指定列名。(3)ON子句用于指定要授予对象权限的数据库对象名,可以是基本表名、视图名等。(4)WITH ADMI
10、N OPTION为可选项,指定后则允许被授权的用户将权限再授予其他用户或角色。,GRANT语句,2、对象权限与角色的授予 例4-19在权限层次中授予对象权限。首先,给所有用户授予 SELECT 权限,然后,将特定的权限授予用户 Mary,John 和 Tom。程序清单如下:GRANT SELECTON sTO publicGOGRANT INSERT,UPDATE,DELETEON sTO Mary,John,TomGO,GRANT语句,2、对象权限与角色的授予 例4-20 将查询T表和修改教师职称的权限授予USER3,并允许将此权限授予其他用户。程序清单如下:GRANT SELECT,UPD
11、ATE(PROF)ON T TO USER3WITH ADMIN OPTION 上例中,USER3具有此对象权限,并可使用GRANT命令给其他用户授权,如下例,USER3将此权限授予USER4:GRANT SELECT,UPDATE(PROF)ON TTO USER4,REVOKE语句,REVOKE语句是与GRANT语句相反的语句,它能够将以前在当前数据库内的用户或者角色上授予或拒绝的权限删除,但是该语句并不影响用户或者角色从其他角色中作为成员继承过来的权限1、语句权限与角色的收回数据库管理员可以使用REVOKE语句收回语句权限,其语法格式为:REVOKE|,|FROM|PUBLIC,|例:收
12、回用户ZHANGYILIN所拥有的CREATE TABLE的语句权限。REVOKE CREATE TABLEFROM ZHANGYILIN,REVOKE语句,例4-21 收回用户USER1对C表的查询权限。程序清单如下:REVOKE SELECTON CFROM USER1例4-22 收回用户USER3查询T表和修改教师职称的权限。程序清单如下:REVOKE SELECT,UPDATE(PROF)ON TFROM USER3在上例中,USER3将对T表的权限授予了USER4,在收回USER3对T表的权限的同时,系统会自动收回USER4对T表的权限。,REVOKE语句,REVOKE语句例4-23
13、首先从 public 角色中收回 SELECT 权限,然后,收回用户 Mary,John 和 Tom 的特定权限。程序清单如下:USE pubsGOREVOKE SELECT ON s FROM publicGOREVOKE INSERT,UPDATE,DELETEON sFROM Mary,John,Tom,DENY语句,DENY语句用于拒绝给当前数据库内的用户或者角色授予权限,并防止用户或角色通过其组或角色成员继承权限。否定语句权限的语法形式为:DENY ALL|,|TO|PUBLIC,|否定对象权限的语法形式为:DENY ALL|(列名,列名),ON TO|PUBLIC,|,DENY语句
14、,例4-24首先给 public 角色授予 SELECT 权限,然后,拒绝用户 Mary,John 和 Tom 的特定权限。程序清单如下:USE pubsGOGRANT SELECTON sTO publicGODENY SELECT,INSERT,UPDATE,DELETEON sTO Mary,John,Tom,4.4 系统存储过程,系统存储过程是SQL Server系统创建的存储过程,它的目的在于能够方便地从系统表中查询信息,或者完成与更新数据库表相关的管理任务或其他的系统管理任务。系统存储过程可以在任意一个数据库中执行。系统存储过程创建并存放于系统数据库master中,并且名称以sp_
15、或者xp_开头。一些系统过程只能由系统管理员使用,而有些系统过程通过授权可以被其他用户使用。,4.4 系统存储过程,系统存储过程的部分示例如下:sp_addtype:用于定义一个用户定义数据类型;sp_configure:用于管理服务器配置选项设置;xp_sendmail:用于发送电子邮件或寻呼信息;sp_stored_procedures:用于返回当前数据库中的存储过程的清单;sp_help:用于显示参数清单和其数据类型;sp_depends:用于显示存储过程依据的对象或者依据存储过程的对象;sp_helptext:用于显示存储过程的定义文本;sp_rename:用于修改当前数据库中用户对象
16、的名称。,SQL Server2005 系统数据库简介,SQL Server 2005 有 4 个系统数据库,它们分别为 Master、Model、Msdb、Tempdb。(1)Master 数据库是 SQL Server 系统最重要的数据库,它记录了 SQL Server 系统的所有系统信息。这些系统信息包括所有的登录信息、系统 设置信息、SQL Server 的初始化信息和其他系统数据库及用户数据库的 相关信息。因此,如果 master 数据库不可用,则 SQL Server 无法启 动。在 SQL Server 2005 中,系统对象不再存储在 master 数据库 中,而是存储在 Re
17、source 数据库 中。,(2)model 数据库用作在 SQL Server 实例上创建的所有数据库的模 板。因为每次启动 SQL Server 时都会创建 tempdb,所以 model 数据 库必须始终存在于 SQL Server 系统中。当发出 CREATE DATABASE(创 建数据库)语句时,将通过复制 model 数据库中的内容来创建数据库 的第一部分,然后用空页填充新数据库的剩余部分。如果修改 model 数据库,之后创建的所有数据库都将继承这些修改。例如,可以设置权 限或数据库选项或者添加对象,例如,表、函数或存储过程。,(3)Msdb 数据库是代理服务数据库,为其报警、
18、任务调度和记录操作员的操作提供存储空间。(4)Tempdb 是一个临时数据库,它为所有的临时表、临时存储过程及其他临时操作提供存储空间。Tempd数据库由整个系统的所有数据库使用,不管用户使用哪个数据库,他们所建立的所有临时表和存储过程都存储在 tempdb 上。SQL Server 每次启动时,tempdb 数据库被重新建立。当用户与 SQL Server 断开连接时,其临时表和存储过程自动被删除。,4.5 其他语言元素,4.5.1 注释4.5.2 常量和变量4.5.3 运算符和表达式4.5.4 常用函数4.5.5 程序流程控制语句,4.5.1 注释,注释是程序代码中不执行的文本字符串(也称
19、为注解)。使用注释对代码进行说明,不仅能使程序易读易懂,而且有助于日后的管理和维护。注释通常用于记录程序名称、作者姓名和主要代码更改的日期。注释还可以用于描述复杂的计算或者解释编程的方法。在 SQL Server 中,可以使用两种类型的注释字符:一种是ANSI 标准的注释符“-”,它用于单行注释;另一种是与 C 语言相同的程序注释符号,即“/*/”。“/*”用于注释文字的开头,“*/”用于注释文字的结尾,利用它们可以在程序中标识多行文字为注释。当然,单行注释也可以使用“/*/”,我们只需将注释行以“/*”开头并以“*/”结尾即可。反之,段落注释也可以使用“-”,只需使段落注释的每一行都以“-”
20、开头即可。,例 4-25 使用两种注释类型的例子。程序清单如下:USE AdventureWorks GO-First line of a multiple-line comment.-Second line of a multiple-line comment.SELECT*FROM person.address GO/*注释语句的第一行.注释语句的第二行.*/SELECT*FROM Production.Product GO-在 Transact-SQL 语言调试过程中使用注释语句。,4.5.2 常量和变量,1.常量常量也称标量值,其格式取决于其所表示值的数据类型。常量按照其值的类型不同,
21、大致可以分为字符串常量、Unicode字符串、二进制常量、BIT常量、DATETIME常量、INTEGER常量、DECIMAL常量、FLOAT、REAL常量、MONEY常量、UNIQUEIDENTIFIER常量。其中,在表示负的数值常量时,只需在数值常量前加减号(-)即可。,1)字符串常量在SQL Server中,字符串常量包含在单引号中。一般情况下,字符串常量是由字母(az、AZ)、数字字符(09)以及特殊字符(!,#)组成的。如果单引号中的字符串包含一个嵌入的引号,可以使用两个单引号表示嵌入的单引号。其中,空字符串是由两个没有任何字符的单引号()表示。SELECT The level#jo
22、b_id:30%!,33,Unicode字符串的格式就是在普通字符串前面有一个大写的N,如LXP是字符串常量,而NLXP是一个Unicode字符串变量。对于字符数据存储Unicode数据时,每个字符使用2个字节,而不是1个字节。,2)二进制常量二进制常量是以0 x开头的数字串,但不是字符串,不需要单引号。由于采用十六进制表时,所以看起来像字符串。3)BIT常量BIT常量其实是一种特殊的INT常量,其有效值要么为0,要么为1,不需要单引号。,35,4)DATETIME常量DATETIME常量是由字符串组成的日期表示,如2008-07-10 00:00:00.000。5)INTEGER常量INTE
23、GER常量是由数字(09)组成,没有小数点。,36,6)DECIMAL常量DECIMAL常量是由数字和小数点组成的小数。7)FLOAT和REAL常量FLOAT和REAL常量是由科学记数法表示的小数,如101.5E5(十进制为10150000)。8)MONEY常量以货币符号开头且包含小数点的数字串表示,一般情况下没有单引号。,37,9)UNIQUEIDENTIFIER常量用来表示GUID的,可以使用字符串或二进制表示,6F9619FF-8B86-B42D-00C04FC964CC 0 xff19966f868b11d0b42d00c04fc964cc是完全相同的GUID。,38,2.变量,变量是
24、一种语言中必不可少的组成部分。Transact-SQL 语言中有两种形式的变 量,一种是用户自己定义的局部变量,另外一种是系统提供的全局变量。1).局部变量 局部变量是一个能够拥有特定数据类型的对象,它的作用范围仅限制在程序内 部。局部变量被引用时要在其名称前加上标志“”,而且必须先用 DECLARE 命 令定义后才可以使用。定义局部变量的语法形式如下:DECLAER local_variable data_type n其中,参数 local_variable 用于指定局部变量的名称,变量名必须以符号 开 头,并且局部变量名必须符合 SQL Server 的命名规则。参数 data_type
25、用于设置 局部变量的数据类型及其大小。data_type 可以是任何由系统提供的或用户定义 的数据类型。但是,局部变量不能是 text,ntext 或 image 数据类型。使用 DECLARE 命令声明并创建局部变量之后,会将其初始值设为 NULL,如果 想要设定局部变量的值,必须使用 SELECT 命令或者 SET 命令。其语法形式为:SET local_variable=expression 或者 SELECT local_variable=expression,.n 其中,参数 local_variable 是给其赋值并声明的局部变量,参数 expression 是 任何有效的 SQL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Transact-SQL语言 2 Transact SQL 语言
链接地址:https://www.31ppt.com/p-6522109.html