大型数据库第3章transactsql语言.ppt
《大型数据库第3章transactsql语言.ppt》由会员分享,可在线阅读,更多相关《大型数据库第3章transactsql语言.ppt(104页珍藏版)》请在三一办公上搜索。
1、2023年10月11日,第1页,第3章使用Transact-SQL编程,本章概述 本章要点本章内容,2023年10月11日,第2页,本章概述,如何方便地在数据库中执行访问数据库对象、查询业务数据等各种操作呢?这需要掌握使用Transact-SQL语言的技术。Transact-SQL语言是微软公司在关系型数据库管理系统Microsoft SQL Server中的ISO SQL的实现。SQL(Structure Query Language,结构化查询语言)语言是国际标准化组织(International Standardize Organization,ISO)采纳的标准数据库语言。通过使用Tr
2、ansact-SQL语言,用户几乎可以完成SQL Server数据库中的各种操作。本章全面介绍Transact-SQL语言的特点和使用方式。,2023年10月11日,第3页,本章要点,Transact-SQL语言和SQL语言之间的关系Transact-SQL语言的特点和执行方式数据定义语言的类型和特点数据操纵语言的类型和特点数据控制语言的类型和特点事务管理语言的类型和特点附加语言元素的类型和特点,2023年10月11日,第4页,本章内容,第一节 Transact-SQL语言简介第二节 函数第三节 增强功能本章小结,第一节 Transact-SQL语言简介,1970年6月,埃德加考特(Edgar
3、 Frank Codd)在Communications of ACM 上发表了大型共享数据库数据的关系模型一文。首次明确而清晰地为数据库系统提出了一种崭新的模型,即关系模型。1970 年以后,考特继续致力于完善与发展关系理论。1972 年,他提出了关系代数和关系演算的概念,定义了关系的并、交、投影、选择、连接等各种基本运算,为SQL语言的形成和发展奠定了理论基础。1979年,SQL在商业数据库中成功得到了应用。,2023年10月11日,第5页,标准版本,1986年,美国国家标准化组织正式发表了编号为X3.135-1986的SQL标准,并且在1987年得到了ISO组织的认可,被命名为ISO907
4、5-1987。后来这个标准在1992、1999、2003、2006、2008年等不断地得到了扩充和完善。1992年发布的标准是SQL92,也称为SQL2。1999年发布的标准称为SQL:1999,也称为SQL3。该版本增加了迭代查询、触发器、控制流以及面向对象功能。2003年,SQL标准引入了XML支持、自动生成值等特征。2006年的标准在XML数据的存储和查询方面有了更多的增强。,2023年10月11日,第6页,Transact-SQL语言,Transact-SQL语言是微软公司在Microsoft SQL Server系统中使用的语言,是对SQL语言的一种扩展形式。Transact-SQL
5、语言是一种交互式查询语言,具有功能强大、简单易学的特点。,2023年10月11日,第7页,特点,Transact-SQL语言有4个特点:一是一体化的特点,集数据定义语言、数据操纵语言、数据控制语言、事务管理语言和附加语言元素为一体。二是有两种使用方式,即交互使用方式和嵌入到高级语言中的使用方式。三是非过程化语言,只需要提出“干什么”,不需要指出“如何干”,语句的操作过程由系统自动完成。四是类似于人的思维习惯,容易理解和掌握。,2023年10月11日,第8页,类型,在Microsoft SQL Server 2008系统中,根据Transact-SQL语言的功能特点,可以把Transact-SQ
6、L语言分为5种类型,即数据定义语言、数据操纵语言、数据控制语言、事务管理语言和附加的语言元素。,2023年10月11日,第9页,Transact-SQL语言的执行方式,在Microsoft SQL Server 2008系统中,主要使用SQL Server Management Studio工具来执行Transact-SQL语言编写的查询语句。除此之外,还可以使用sqlcmd实用命令、PowerShell工具来执行Transact-SQL语句。下面主要介绍SQL Server Management Studio工具的特点。,2023年10月11日,第10页,在查询窗口中执行Transact-S
7、QL语句,2023年10月11日,第11页,数据定义语言,数据定义语言用于创建数据库和数据库对象,为数据库操作提供对象。例如,数据库以及表、触发器、存储过程、视图、索引、函数、类型及用户等都是数据库中的对象,需要定义后才能使用。在DDL中,主要的Transact-SQL语句包括CREATE语句、ALTER语句和DROP语句。,2023年10月11日,第12页,CREATE语句示例,2023年10月11日,第13页,ALTER语句示例,2023年10月11日,第14页,DROP语句示例,2023年10月11日,第15页,数据操纵语言,数据操纵语言主要是用于操纵表、视图中数据的语句。当创建表对象之
8、后,初始状态时该表是空的,没有任何数据。如何向表中添加数据呢?这时需要使用INSERT语句。如何检索表中数据呢?可以使用SELECT语句。如果表中数据不正确,可以使用UPDATE语句进行更新。当然,也可以使用DELETE语句删除表中的数据。实际上,DML语言包括了INSERT、SELECT、UPDATE和DELETE等语句。,2023年10月11日,第16页,附加的语言元素,除了前面介绍的语句之外,Transact-SQL语言还包括了附加的语言元素。这些附加的语言元素主要包括标识符、变量和常量、运算符、表达式、数据类型、函数、控制流语言、错误处理语言和注释等。下面,详细介绍这些内容。,2023
9、年10月11日,第17页,标识符,在Transact-SQL语言中,数据库对象的名称就是其标识符。在Microsoft SQL Server系统中,所有的数据库对象都可以有标识符,例如服务器、数据库、表、视图、索引、触发器和约束等。大多数对象的标识符是必需的,例如,创建表时必须为表指定标识符。但是,也有一些对象的标识符是可选的,例如,创建约束时用户可以不提供标识符,其标识符由系统自动生成。,2023年10月11日,第18页,变量和常量,常量是表示特定数据值的符号,常量也被称为字面量。常量的格式取决于它所表示的值的数据类型。例如,This is a book.、May 1,2006、98321等
10、都是常量。对于字符常量或时间日期型常量,需要使用单引号引起来。当字符串中有单引号时,则用两个单引号来表示。Unicode常量必须有一个大写的N来区别字符串常量。,2023年10月11日,第19页,变量和常量,在Microsoft SQL Server 2008系统中,变量也被称为局部变量,是可以保存单个特定类型数据值的对象。全局变量以开头命名,局部变量以开头命名。全局变量由系统提供,用于存储一些系统信息,只可以使用全局变量,不可以自定义全局变量。,2023年10月11日,第20页,声明和赋值,在Transact-SQL语言中,可以使用DECLARE语句声明变量。在声明变量时需要注意:第一,为变
11、量指定名称,且名称的第一个字符必须是;第二,指定该变量的数据类型和长度;第三,默认情况下将该变量值设置为NULL。可以在一个DECLARE语句中声明多个变量,变量之间使用逗号分割开。变量的作用域是可以引用该变量的Transact-SQL语句的范围。变量的作用域从声明变量的地方开始到声明变量的批处理的结尾。,2023年10月11日,第21页,有两种为变量赋值的方式:使用SET语句为变量赋值和使用SELECT语句选择列表中当前所引用值来为变量赋值。使用select和print语句可以显示变量内容。,使用变量,2023年10月11日,第23页,例:查询计算机系学生人数,并输出。declare ren
12、shu intselect renshu=count(*)from student where sdept=CSprintCS人数:+cast(renshu as varchar(10),运算符,运算符是一种符号,用来指定要在一个或多个表达式中执行的操作。在Microsoft SQL Server 2008系统中,可以使用的运算符可以分为算术运算符、逻辑运算符、赋值运算符、字符串串联运算符、按位运算符、一元运算符和比较运算符等。,2023年10月11日,第24页,使用赋值运算符,2023年10月11日,第25页,使用字符串串联运算符,2023年10月11日,第26页,使用位运算符,2023年1
13、0月11日,第27页,表达式,在Transact-SQL语言中,表达式是由标识符、变量、常量、标量函数、子查询以及运算符等的组合。在Microsoft SQL Server 2008系统中,表达式可以在多个不同的位置使用,这些位置包括查询中检索数据的一部分、搜索数据的条件等。表达式可以分为简单表达式和复杂表达式两种类型。简单表达式只是一个变量、常量、列名或标量函数,复杂表达式是由两个或多个简单表达式通过使用运算符连接起来的表达式。在复杂表达式中,两个或多个表达式有相同的数据类型,优先级低的数据类型可以隐式地转换为优先级高的数据类型。,2023年10月11日,第28页,注释,所有的程序设计语言都
14、有注释。注释是程序代码中不执行的文本字符串,用于对代码进行说明或暂时仅用正在进行诊断的部分语句。一般地,注释主要描述程序名称、作者名称、变量说明、代码更改日期以及算法描述等。在Microsoft SQL Server系统中,支持两种注释方式,即双连字符(-)注释方式和正斜杠星号字符对(/*/)注释方式。,2023年10月11日,第29页,使用注释,2023年10月11日,第30页,控制流语言,一般地,结构化程序设计语言的基本结构是顺序结构、条件分支结构和循环结构。顺序结构是一种自然结构,条件分支结构和循环结构都需要根据程序的执行状况对程序的执行顺序进行调整。在Transact-SQL语言中,用
15、于控制语句流的语言被称为控制流语言。Microsoft SQL Server 2008系统提供了8种控制流语句。,2023年10月11日,第31页,1.Beginend2.Ifelse3.while4.break5.continue6.goto7.Return8.wairfor,Beginend,Ifelse,例:查询并显示MA系人数。begindeclare renshu intselect renshu=count(*)from student where sdept=MAif renshu=0 print MA系无人elseprintMA人数:+cast(renshu as varcha
16、r(10)end,while,语法:WHILE Boolean_expression sql_statement|statement_block BREAK sql_statement|statement_block CONTINUE sql_statement|statement_block BREAK:导致从最内层的 WHILE 循环中退出CONTINUE:使 WHILE 循环重新开始执行,忽略 CONTINUE 关键字后面的任何语句。,while,例:求1到10的累加和。declare i int,sum intset i=1set sum=0while(i=10)beginset su
17、m=sum+iset i+=1endprint sum=+cast(sum as varchar(20),waitfor,用于延迟后续的代码执行,或等到指定的时间后再执行后续的代码。语法:WAITFOR DELAY time_to_pass|TIME time_to_execute(receive_statement)|get_conversation_group_statement),TIMEOUT timeoutDELAY:可以继续执行批处理、存储过程或事务之前必须经过的指定时段,最长可为24小时。time_to_pass:等待的时段。可以使用datetime数据可接受的格式之一指定tim
18、e_to_pass,也可以将其指定为局部变量。不能指定日期;因此,不允许指定datetime值的日期部分。TIME:指定的运行批处理、存储过程或事务的时间。time_to_execute:WAITFOR 语句完成的时间。可以使用datetime数据可接受的格式之一指定time_to_execute,也可以将其指定为局部变量。不能指定日期;因此,不允许指定datetime值的日期部分。,例1:在晚上10:20(22:20)执行存储过程sp_update_job,将作业testJob改名为UpdatedJob。USE msdb;EXECUTE sp_add_job job_name=TestJob
19、;BEGIN WAITFOR TIME 22:20;EXECUTE sp_update_job job_name=TestJob,new_name=UpdatedJob;END;GO,例2:在两小时的延迟后执行存储过程。BEGIN WAITFOR DELAY 02:00;EXECUTE sp_helpdb;END;GO,错误捕捉语言Trycatch,为了增强程序的健壮性,必须对程序中可能出现的错误进行及时的处理。在Transact-SQL语言中,可以使用两种方式处理发生的错误:使用TRYCATCH构造和使用ERROR函数。在Transact-SQL语句中,可以使用TRYCATCH构造来处理Tr
20、ansact-SQL代码中的错误。,2023年10月11日,第39页,错误捕捉语言Trycatch,TRYCATCH 构造包括两部分:一个 TRY 块和一个 CATCH 块。如果在 TRY 块内的 Transact-SQL 语句中检测到错误条件,则控制将被传递到 CATCH 块(可在此块中处理此错误)。CATCH 块处理该异常错误后,控制将被传递到 END CATCH 语句后面的第一个 Transact-SQL 语句。如果 TRY 块中没有错误,控制将传递到关联的 END CATCH 语句后紧跟的语句。,TRY 块以 BEGIN TRY 语句开头,以 END TRY 语句结尾。CATCH 块必
21、须紧跟 TRY 块。CATCH 块以 BEGIN CATCH 语句开头,以 END CATCH 语句结尾。TRY.CATCH 块不处理导致数据库引擎关闭连接的严重性为 20 或更高的错误。但是,只要连接不关闭,TRY.CATCH 就会处理严重性为 20 或更高的错误。严重性为 10 或更低的错误被视为警告或信息性消息,TRY.CATCH 块不处理此类错误。,TRY.CATCH 使用下列错误函数来捕获错误信息:ERROR_NUMBER()返回错误号。ERROR_MESSAGE()返回错误消息的完整文本。此文本包括为任何可替换参数(如长度、对象名或时间)提供的值。ERROR_SEVERITY()返
22、回错误严重性。ERROR_STATE()返回错误状态号。ERROR_LINE()返回导致错误的例程中的行号。ERROR_PROCEDURE()返回出现错误的存储过程或触发器的名称。,例:使用TRYcatch处理被零除错误。BEGIN TRY SELECT 1/0;END TRYBEGIN CATCH SELECT ERROR_NUMBER()AS ErrorNumber,ERROR_SEVERITY()AS ErrorSeverity,ERROR_STATE()as ErrorState,ERROR_PROCEDURE()as ErrorProcedure,ERROR_LINE()as Err
23、orLine,ERROR_MESSAGE()as ErrorMessage;END CATCH;,例:执行插入语句,向student表中插入一条记录,出错时显示错误信息。BEGIN TRY insert into student values(201215124,刘秀,男,20,CS,2012)END TRYBEGIN CATCH SELECT ERROR_NUMBER()AS ErrorNumber,ERROR_SEVERITY()AS ErrorSeverity,ERROR_STATE()as ErrorState,ERROR_PROCEDURE()as ErrorProcedure,ER
24、ROR_LINE()as ErrorLine,ERROR_MESSAGE()as ErrorMessage;END CATCH;,使用ERROR函数,功能:返回执行的上一个 Transact-SQL 语句的错误号。如果前一个 Transact-SQL 语句执行没有错误,则返回 0。如果前一个语句遇到错误,则返回错误号。由于 ERROR 在每一条语句执行后被清除并且重置,因此应在语句验证后立即查看它,或将其保存到一个局部变量中以备以后查看。,例:插入数据到student,并显示错误号。insert into student values(201215125,刘音,女,20,CS,2012);pr
25、int ERROR,七、数据库对象的引用方法,Server_name.database_name.schema_name.|database_name.schema_name.|schema_name.object_nameServer_name:链接服务器名称或远程服务器名称;Database_name:如果对象是驻留在SQL Server的本地实例中,则database_name是SQL Server数据库的名称。如果对象在链接服务器中,则database_name是OLE_DB目录。Schema_name:如果对象是驻留在SQL Server的本地实例中,则schema_name是包含对
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大型 数据库 transactsql 语言
链接地址:https://www.31ppt.com/p-6266277.html