《数据库整理》第3章sql.ppt
第第3章章 关系数据库标准语言关系数据库标准语言SQL23.1 SQL语言的基本概念与特点语言的基本概念与特点3.2 了解了解SQL Server 20083.3 创建与使用数据库创建与使用数据库3.4 创建与使用数据表创建与使用数据表3.5 创建与使用索引创建与使用索引3.6 数据查询数据查询3.7 数据更新数据更新3.8 视图视图3.9 数据控制数据控制3结构化查询语言结构化查询语言Structured Query Language 数据查询数据查询数据定义数据定义数据操纵数据操纵 数据控制数据控制 SQL简洁、方便实用、功能齐全,已成为目前应用最广泛的关系简洁、方便实用、功能齐全,已成为目前应用最广泛的关系数据库语言。数据库语言。43.1 SQL语言的基本概念与特点语言的基本概念与特点 3.1.1 SQL语言的发展及标准化语言的发展及标准化 SQL语言的发展语言的发展 Chamberlin Chamberlin SEQUELSQL大型数据库大型数据库SybaseINFORMIXSQLServerOracleDB2INGRES-小型数据库小型数据库FoxProAccess53.1.2 SQL语言的基本概念语言的基本概念 基本表(基本表(Base Table)一个关系对应一个基本表一个关系对应一个基本表 一个或多个基本表对应一个存储文件一个或多个基本表对应一个存储文件 视图(视图(View)视图是从一个或几个基本表导出的表,是一个虚拟的视图是从一个或几个基本表导出的表,是一个虚拟的表表 S(SNo,SN,Sex,Age,Dept)S_Male(SNo,SN,Age,Dept)无数据,只有定义无数据,只有定义Sex=男男在数据库中只存有在数据库中只存有S_Male的定义,数的定义,数据仍在据仍在S表中表中6SQL语言支持的关系数据库的三级模式结构语言支持的关系数据库的三级模式结构73.1.3 SQL语言的主要特点语言的主要特点 SQL语言是类似于英语的自然语言,简洁易用语言是类似于英语的自然语言,简洁易用 SQL语言是一种非过程语言语言是一种非过程语言 SQL语言是一种面向集合的语言语言是一种面向集合的语言 SQL语言既是自含式语言,又是嵌入式语言语言既是自含式语言,又是嵌入式语言SQL语言具有数据查询、数据定义、数据操纵和数据控语言具有数据查询、数据定义、数据操纵和数据控制四种功能制四种功能 83.2 了解了解SQL Server 2008 企业版企业版SQL Server 2008 是满足企业联机事务处理和数据仓库应用程序高标准要求的综合是满足企业联机事务处理和数据仓库应用程序高标准要求的综合数据平台。数据平台。标准版标准版SQL Server 2008 Standard 是一个完整的数据管理和商业智能平台,为正在运行是一个完整的数据管理和商业智能平台,为正在运行的部门应用程序提供一流的易用性和易管理性。的部门应用程序提供一流的易用性和易管理性。Specialized 版本版本工作组版工作组版在此可靠的数据管理和报表平台上运行分机位置,提供安全性的远程同步和管理在此可靠的数据管理和报表平台上运行分机位置,提供安全性的远程同步和管理功能。功能。网络版网络版借助于面向借助于面向 Web 服务环境的高度可用的服务环境的高度可用的 Internet,为您的客户提供低成本、大规,为您的客户提供低成本、大规模、高度可用的模、高度可用的 Web 应用程序或主机解决方案。应用程序或主机解决方案。移动版移动版可以免费下载,为所有可以免费下载,为所有 Microsoft Windows 平台上的移动设备、桌面和平台上的移动设备、桌面和 Web 客客户端构建单机应用程序和偶尔连接的应用程序。户端构建单机应用程序和偶尔连接的应用程序。免费版免费版可以免费下载,可以免费下载,Express 对于学习和构建桌面和小型服务器应用程序以及对于通对于学习和构建桌面和小型服务器应用程序以及对于通过过 ISV 重新分发非常理想。重新分发非常理想。9SQL Server 发展发展年份版本说明1988SQLServer与Sybase共同开发的、运行于OS/2上的联合应用程序1993SQLServer4.2一种桌面数据库一种功能较少的桌面数据库,能够满足小部门数据存储和处理的需求。数据库与Windows集成,界面易于使用并广受欢迎1994微软与Sybase终止合作关系1995SQLServer6.05一种小型商业数据库对核心数据库引擎做了重大的改写。这是首次“意义非凡”的发布,性能得以提升,重要的特性得到增强。在性能和特性上,尽管以后的版本还有很长的路要走,但这一版本的SQLServer具备了处理小型电子商务和内联网应用程序的能力,而在花费上却少于其他的同类产品1996SQLServer6.5SQLServer逐渐突显实力,以至于Oracle推出了运行于NT平台上的7.1版本作为直接的竞争1998SQLServer7.0一种Web数据库再一次对核心数据库引擎进行了重大改写。这是相当强大的、具有丰富特性的数据库产品的明确发布,该数据库介于基本的桌面数据库(如MicrosoftAccess)与高端企业级数据库(如Oracle和DB2)之间(价格上亦如此),为中小型企业提供了切实可行(并且还廉价)的可选方案。该版本易于使用,并提供了对于其他竞争数据库来说需要额外附加的昂贵的重要商业工具(例如,分析服务、数据转换服务),因此获得了良好的声誉2000SQLServer2000一种企业级数据库SQLServer在可扩缩性和可靠性上有了很大的改进,成为企业级数据库市场中重要的一员(支持企业的联机操作,其所支持的企业有NASDAQ、戴尔和巴诺等)。虽然SQLServer在价格上有很大的上涨(尽管算起来还只是Oracle售价的一半左右),减缓了其最初被接纳的进度,但它卓越的管理工具、开发工具和分析工具赢得了新的客户。2001年,在Windows数据库市场(2001年价值25.5亿美元),Oracle(34%的市场份额)不敌SQLServer(40%的市场份额),最终将其市场第一的位置让出。2002年,差距继续拉大,SQLServer取得45%的市场份额,而Oracle的市场份额下滑至27%(来源于2003年5月21日的GartnerReport)2005SQLServer2005对SQLServer的许多地方进行了改写,例如,通过名为集成服务(IntegrationService)的工具来加载数据,不过,SQLServer2005最伟大的飞跃是引入了.NETFramework。引入.NETFramework将允许构建.NETSQLServer专有对象,从而使SQLServer具有灵活的功能,正如包含Java的Oracle所拥有的那样20082012、2014SQLServer2008SQLServer2008以处理目前能够采用的许多种不同的数据形式为目的,通过提供新的数据类型和使用语言集成查询(LINQ),在SQLServer2005的架构的基础之上打造出了SQLServer2008。SQLServer2008同样涉及处理像XML这样的数据、紧凑设备(compactdevice)以及位于多个不同地方的数据库安装。另外,它提供了在一个框架中设置规则的能力,以确保数据库和对象符合定义的标准,并且,当这些对象不符合该标准时,还能够就此进行报告103.2.1 SQL Server 2008的组件与体系结构的组件与体系结构SQL Server 2008系统由系统由4个主要部分组成,这个主要部分组成,这4个部分被称为个部分被称为4个服务,分别是上面的数据引擎、分析服务、报表服务和集成服务。这个服务,分别是上面的数据引擎、分析服务、报表服务和集成服务。这些服务之间相互依存。些服务之间相互依存。数据库引擎数据库引擎是(是(SQL Server Database Engine,SSDE)是)是SQL Server 2008系统的核心服务,负责完系统的核心服务,负责完成业务数据的存储、处理、查询和安全管理等操作。例成业务数据的存储、处理、查询和安全管理等操作。例如:创建数据库、创建表、执行各种数据查询、访问数如:创建数据库、创建表、执行各种数据查询、访问数据库等操作都是由数据库引擎完成的。据库等操作都是由数据库引擎完成的。分析服务分析服务(SQL Server Analysis Server,SSAS)提)提供了多维分析和数据挖掘功能,可以支持用户建立数据供了多维分析和数据挖掘功能,可以支持用户建立数据库和进行商业智能分析。库和进行商业智能分析。报表服务报表服务(SQL Server Reporting Services,SSRS)为用户提供了支持)为用户提供了支持Web的企业级的报表功能。的企业级的报表功能。通过使用通过使用SQL Server 2008系统提供的系统提供的SSRS服务,用服务,用户可以方便地定义和发展布满足自己需求的报表。户可以方便地定义和发展布满足自己需求的报表。集成服务集成服务(SQL Server Integration Sevives,SSIS)是一个数据集成平台,可以完成有关数据的提取、转换、是一个数据集成平台,可以完成有关数据的提取、转换、加载等。加载等。113.2.2 企业管理器企业管理器 由由Enterprise Manager产生的产生的SQL脚本是一个后缀脚本是一个后缀名为名为.sql的文件的文件企业管理器的管理工作企业管理器的管理工作 文本文件文本文件管理数据库管理数据库管理数据库对象管理数据库对象管理备份管理备份管理复制管理复制管理登录和许可管理登录和许可管理管理SQL Server Agent管理管理SQL Server Mail企业管理器界面、菜单、工具栏企业管理器界面、菜单、工具栏123.2.3 查询分析器查询分析器 使用查询分析器的使用查询分析器的熟练程度熟练程度是衡量一个是衡量一个SQL Server用户水平的标准。用户水平的标准。自自SQL server 2005开始微将企业管理器和查询分析器合二为一,开始微将企业管理器和查询分析器合二为一,统一整合到统一整合到 SQL Server Management Studio中。中。133.3 创建与使用数据库创建与使用数据库 数据文件数据文件1 事务日志文件事务日志文件数据库数据库数据文件数据文件n 存放数据库数据和数据库对象的文件存放数据库数据和数据库对象的文件 主要数据文件主要数据文件(.mdf)+次要数据文件次要数据文件(.ndf)只有一只有一个个可有多个可有多个记录数据库记录数据库更新更新情况,扩展名为情况,扩展名为.ldf 当数据库破坏时可以用事务日志还原数据当数据库破坏时可以用事务日志还原数据库内容库内容 采用多个数据文件来存储数据的优点体现在:采用多个数据文件来存储数据的优点体现在:(1)数据文件可以不断扩充而不受操作系统文件大小的限制。数据文件可以不断扩充而不受操作系统文件大小的限制。(2)可将数据文件存储在不同的硬盘中,同时对多个硬盘做数据存取,提高效率。可将数据文件存储在不同的硬盘中,同时对多个硬盘做数据存取,提高效率。14文件组文件组文件组(文件组(File Group)是将多个数据文件集合起来形)是将多个数据文件集合起来形成的一个整体成的一个整体 主要文件组主要文件组+次要文件组次要文件组 一个数据文件只能存在于一个文件组中,一个文件组一个数据文件只能存在于一个文件组中,一个文件组也只能被一个数据库使用也只能被一个数据库使用 日志文件不分组,它不能属于任何文件组日志文件不分组,它不能属于任何文件组 153.3.1 SQL Server的系统数据库的系统数据库 Model Msdb Tempdb系系统统默默认认数数据据库库系统信息系统信息:磁盘空间磁盘空间;文件分配和使用;文件分配和使用;系统级的配置参;系统级的配置参数;登录账号信息数;登录账号信息;SQL Server初始化信息;初始化信息;系统中其他系统数据库和用户数据库的相关信息系统中其他系统数据库和用户数据库的相关信息 Model数据库存储了所有用户数据库和数据库存储了所有用户数据库和Tempdb数数据库的创建模板据库的创建模板 通过更改通过更改Model数据库的设置可以大大简化数据数据库的设置可以大大简化数据库及其对象的创建设置工作库及其对象的创建设置工作 存储计划信息以及与备份和还原相关的信息存储计划信息以及与备份和还原相关的信息 Tempdb数据库用作系统的数据库用作系统的临时存储空间临时存储空间 存储临时表存储临时表,临时存储过程和全局变量值临时存储过程和全局变量值,创建临,创建临时表时表,存储用户利用游标说明所筛选出来的数据,存储用户利用游标说明所筛选出来的数据 Master 163.3.2 SQL Server的实例数据库的实例数据库 实实例例数数据据库库 pubsNorthwind虚构的图书出版公司的基本情况虚构的图书出版公司的基本情况 包含了一个公司的销售数据包含了一个公司的销售数据 SQL Server2005及及SQL Server 2008中,代码示例和示例数据库中,代码示例和示例数据库不再随产品一起提供。但可以从不再随产品一起提供。但可以从 http:/ 下载。下载。173.3.3 创建用户数据库创建用户数据库 用用SQL Server Management Studio(SSMS)创建数据库创建数据库 用用SQL命令创建数据库命令创建数据库 CREATE DATABASE database_name ON ,.n ,.n LOG ON ,.n COLLATE collation_name FOR LOAD|FOR ATTACH 18例例3-1 用用SQL命令创建一个命令创建一个教学数据库教学数据库Teach,数据文,数据文件的逻辑名称为件的逻辑名称为Teach_Data,数据文件物理地存放在,数据文件物理地存放在D:盘的根目录下,文件名:盘的根目录下,文件名为为TeachData.mdf,数据文,数据文件的初始存储空间大小为件的初始存储空间大小为10MB,最大存储空间为,最大存储空间为50MB,存储空间自动增长,存储空间自动增长量为量为5MB;日志文件的逻;日志文件的逻辑名称为辑名称为Teach_Log,日志,日志文件物理地存放在文件物理地存放在D:盘的:盘的根目录下,文件名为根目录下,文件名为TeachLog.ldf,初始存储空,初始存储空间大小为间大小为10MB,最大存储,最大存储空间为空间为25MB,存储空间自,存储空间自动增长量为动增长量为5MB。CREATE DATABASE TeachON(NAME=Teach_Data,FILENAME=D:TeachData.mdf,SIZE=10,MAXSIZE=50,FILEGROWTH=5)LOG ON(NAME=Teach_Log,FILENAME=D:TeachLog.ldf,SIZE=5,MAXSIZE=25,FILEGROWTH=5)19CREATE DATABASE MyDBON PRIMARY (NAME=MyDB_file1,FILENAME=NC:DataMyDB_1.mdf,SIZE=10MB,MAXSIZE=50MB,FILEGROWTH=10%),(NAME=MyDB_file2,FILENAME=NC:DataMyDB_2.ndf,SIZE=10MB,MAXSIZE=50MB,FILEGROWTH=10%),FILEGROUP NewFileGroup1 (NAME=MyDB_file3,FILENAME=NC:DataMyDB_3.ndf,SIZE=10MB,MAXSIZE=50MB,FILEGROWTH=10%),(NAME=MyDB_file4,FILENAME=NC:DataMyDB_4.ndf,SIZE=10MB,MAXSIZE=50MB,FILEGROWTH=10%),FILEGROUP NewFileGroup2 (NAME=MyDB_file5,FILENAME=NC:DataMyDB_5.ndf,SIZE=10MB,MAXSIZE=50MB,FILEGROWTH=10%)LOG ON (NAME=MyDB_Logfile1,FILENAME=NC:DataMyDB_Logfile1.ldf,SIZE=10MB,MAXSIZE=50MB,FILEGROWTH=10%),(NAME=MyDB_Logfile2,FILENAME=NC:DataMyDB_Logfile2.ldf,SIZE=5MB,MAXSIZE=25MB,FILEGROWTH=5MB)GO数据库MyDB主文件组主文件组10MBC:DataMyDB_1.mdf10MBC:DataMyDB_2.ndfNewFileGroup1文件组文件组10MBC:DataMyDB_3.ndf10MBC:DataMyDB_4.ndfNewFileGroup2文件组文件组10MBC:DataMyDB_5.ndf日志文件组日志文件组10MBC:DataMyDB_Logfile1.ldf10MBC:DataMyDB_Logfile2.ldf213.3.4 修改用户数据库修改用户数据库 用用SSMS修改数据库修改数据库 用用SQL命令修改数据库命令修改数据库 ALTER DATABASE database_name ADD FILE ,.n TO FILEGROUP filegroup_name|ADD LOG FILE ,.n|REMOVE FILE logical_file_name WITH DELETE|ADD FILEGROUP filegroup_name|REMOVE FILEGROUP filegroup_name|MODIFY FILE|MODIFY NAME=new_dbname|MODIFY FILEGROUP filegroup_name filegroup_property|NAME=new_filegroup_name|SET ,.n WITH|COLLATE 22例例3-2 修改修改Teaching数据库中的逻辑文件名数据库中的逻辑文件名Teaching_Data的文件增容方式的文件增容方式为一次增加为一次增加2MB。ALTER DATABASE TeachingMODIFY FILE(NAME=Teaching_Data,FILEGROWTH=2mb)233.3.5 删除用户数据库删除用户数据库 用用SSMS删除数据库删除数据库 用用SQL命令删除数据库命令删除数据库 DROP DATABASE database_name,.n 例例3-3 删除数据库删除数据库Teach。DROP DATABASE Teach 243.3.6 查看数据库信息查看数据库信息 用用SSMS查看数据库信息查看数据库信息(属性)用系统存储过程显示数据库信息用系统存储过程显示数据库信息 用系统存储过程显示数据库结构用系统存储过程显示数据库结构 用系统存储过程显示文件信息用系统存储过程显示文件信息 用系统存储过程显示文件组信息用系统存储过程显示文件组信息 Sp_helpdb dbname=nameSp_helpfile filename=name Sp_helpfilegroup filegroupname=name25EXEC Sp_helpdb NorthwindEXEC Sp_helpfile Northwind EXEC Sp_helpfilegroup 263.4 创建与使用数据表创建与使用数据表 3.4.1 数据类型数据类型 整数数据整数数据精确数值精确数值 近似浮点数值近似浮点数值 日期时间数据日期时间数据 bigint,int,smallint,tinyint numeric和和decimal float和和real datetime与与smalldatetime 27字符串数据字符串数据 Unicode字符串数据字符串数据 二进制数据二进制数据 货币数据货币数据 char、varchar、textnchar、nvarchar与与ntextbinary、varbinary、image money与与smallmoney 标记数据标记数据 timestamp和和uniqueidentifier 283.4.2 创建数据表创建数据表 用用SSMS创建数据表创建数据表 相关属性定义相关属性定义“字段名字段名”“数据类型数据类型”字段的字段的“长度长度”、“精度精度”和和“小数位数小数位数”“允许空允许空”“默认值默认值”同一表中不许有重名字段同一表中不许有重名字段 系统默认为系统默认为NULL29 用用SQL命令创建数据表命令创建数据表 CREATE TABLE(,|)例例3-4 用用SQL命令建立一个学生表命令建立一个学生表S。CREATE TABLE S(SNo CHAR(6),SN VARCHAR(8),Sex CHAR(2)DEFAULT 男男,Age INT,Dept VARCHAR(20)DEFAULT 缺省值为缺省值为“男男”303.4.3 定义数据表的约束定义数据表的约束 正确性正确性 有效性有效性 相容性相容性 数据的完整性数据的完整性 约束(约束(Constraint)默认(默认(Default)规则(规则(Rule)触发器(触发器(Trigger)存储过程(存储过程(Stored Procedure)SQL Server的数据完整性机制的数据完整性机制 第3章第5章第7章31完整性约束的基本语法格式完整性约束的基本语法格式 CONSTRAINT NULL/NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK 约束是约束是SQL Server自动强制数据库完整自动强制数据库完整性的方式,约束定义了列中允许的取值。性的方式,约束定义了列中允许的取值。列约束列约束 CONSTRAINT 表约束表约束 ,CONSTRAINT (,)列约束列约束列约束列约束/表约束表约束列约束列约束/表约束表约束列约束列约束/表约束表约束列约束列约束/表约束表约束32NULL/NOT NULL约束约束 NULL表示表示“不知道不知道”、“不确定不确定”或或“没有数据没有数据”的意的意思思 主键列不允许出现空值主键列不允许出现空值 CONSTRAINT NULL|NOT NULL例例3-5 建立一个建立一个S表,对表,对SNo字段进行字段进行NOT NULL约束。约束。CREATE TABLE S(SNo CHAR(6)CONSTRAINT S_Cons NOT NULL,SN VARCHAR(8),Sex CHAR(2),Age INT,Dept VARCHAR(20)可省略约束名称可省略约束名称:SNo CHAR(6)NOT NULL 33UNIQUE约束(惟一约束)约束(惟一约束)指明基本表在某一列或多个列的组合上的取值必须惟一指明基本表在某一列或多个列的组合上的取值必须惟一在建立在建立UNIQUE约束时,需要考虑以下几个因素:约束时,需要考虑以下几个因素:使用使用UNIQUE约束的字段允许为约束的字段允许为NULL值。值。一个表中可以允许有多个一个表中可以允许有多个UNIQUE约束。约束。可以把可以把UNIQUE约束定义在多个字段上。约束定义在多个字段上。UNIQUE约束用于强制在指定字段上创建一个约束用于强制在指定字段上创建一个UNIQUE索引,索引,缺省为非聚集索引。缺省为非聚集索引。UNIQUE用于定义列约束用于定义列约束 CONSTRAINT UNIQUE UNIQUE用于定义表约束用于定义表约束 CONSTRAINT UNIQUE(,)34例例3-6 建立一个建立一个S表,定义表,定义SN为惟一键。为惟一键。CREATE TABLE S(SNo CHAR(6),SN CHAR(8)CONSTRAINT SN_Uniq UNIQUE,Sex CHAR(2),Age INT,Dept VARCHAR(20)例例3-7 建立一个建立一个S表,定义表,定义SN+SEX为惟一键,此约为惟一键,此约束为表约束。束为表约束。CREATE TABLE S(SNo CHAR(6),SN CHAR(8)UNIQUE,Sex CHAR(2),Age INT,Dept VARCHAR(20),CONSTRAINT S_UNIQ UNIQUE(SN,Sex)SN_Uniq可以省略可以省略 SN CHAR(8)UNIQUE 35 PRIMARY KEY约束(主键约束)约束(主键约束)用于定义基本表的主键,起惟一标识作用用于定义基本表的主键,起惟一标识作用PRIMARY KEY与与UNIQUE 的区别:的区别:一个基本表中只能有一个一个基本表中只能有一个PRIMARY KEY,但可多个,但可多个UNIQUE对于指定为对于指定为PRIMARY KEY的一个列或多个列的组合,其中任的一个列或多个列的组合,其中任何一个列都不能出现何一个列都不能出现NULL值,而对于值,而对于UNIQUE所约束的惟一所约束的惟一键,则允许为键,则允许为NULL 对于指定为对于指定为PRIMARY KEY的一个列或多个列的组合,其中任的一个列或多个列的组合,其中任何一个列都不能出现何一个列都不能出现NULL值,而对于值,而对于UNIQUE所约束的惟一所约束的惟一键,则允许为键,则允许为NULL 不能为不能为NULL 不能重不能重复复 36PRIMARY KEY用于定义列约束用于定义列约束 CONSTRAINT PRIMARY KEY PRIMARY KEY用于定义表约束用于定义表约束 CONSTRAINT PRIMARY KEY(,)例例3-8 建立一个建立一个S表,定义表,定义SNo为为S的主键,建立另外一个数据表的主键,建立另外一个数据表C,定义定义CNo为为C的主键。的主键。CREATE TABLE S(SNo CHAR(6)CONSTRAINT S_Prim PRIMARY KEY,SN CHAR(8),Sex CHAR(2),Age INT,Dept VARCHAR(20)CREATE TABLE C(CNo CHAR(5)CONSTRAINT C_Prim PRIMARY KEY,CN CHAR(20),CT INT)37例例3-9 建立一个建立一个SC表,定义表,定义SNo+CNo为为SC的主键。的主键。CREATE TABLE SC(SNo CHAR(5)NOT NULL,CNo CHAR(5)NOT NULL,Score NUMERIC(4,1),CONSTRAINT SC_Prim PRIMARY KEY(SNo,CNo)38 FOREIGN KEY约束(外键约束)约束(外键约束)CONSTRAINT FOREIGN KEY REFERENCES (,)外部键外部键 从表从表 主键主键 主表主表 引用引用 39例例3-10 建立一个建立一个SC表,定义表,定义SNo,CNo为为SC的外部键。的外部键。CREATE TABLE SC(SNo CHAR(5)NOT NULL CONSTRAINT S_Fore FOREIGN KEY REFERENCES S(SNo),CNo CHAR(5)NOT NULL CONSTRAINT C_Fore FOREIGN KEY REFERENCES C(CNo),Score NUMERIC(4,1),CONSTRAINT S_C_Prim PRIMARY KEY(SNo,CNo);40CHECK约束约束 CHECK约束用来检查字段值所允许的范围约束用来检查字段值所允许的范围 在建立在建立CHECK约束时,需要考虑以下几个因素:约束时,需要考虑以下几个因素:一个表中可以定义多个一个表中可以定义多个CHECK约束。约束。每个字段只能定义一个每个字段只能定义一个CHECK约束。约束。在多个字段上定义的在多个字段上定义的CHECK约束必须为表约束。约束必须为表约束。当执行当执行INSERT、UNDATE语句时语句时CHECK约束将验证数据。约束将验证数据。CONSTRAINT CHECK()41例例3-11 建立一个建立一个SC表,定义表,定义Score的取值范围为的取值范围为0100之间。之间。CREATE TABLE SC(SNo CHAR(5),CNo CHAR(5),Score NUMERIC(4,1)CONSTRAINT Score_Chk CHECK(Score=0 AND Score=100)例例3-12 建立包含完整性定义的学生表。建立包含完整性定义的学生表。CREATE TABLE S(SNo CHAR(6)CONSTRAINT S_Prim PRIMARY KEY,SN CHAR(8)CONSTRAINT SN_Cons NOT NULL,Sex CHAR(2)DEFAULT 男男,Age INT CONSTRAINT Age_Cons NOT NULL CONSTRAINT Age_Chk CHECK(Age BETWEEN 15 AND 50),Dept CHAR(10)CONSTRAINT Dept_Cons NOT NULL)423.4.4 修改数据表修改数据表 用用SSMS修改数据表的结构修改数据表的结构 用用SQL命令修改数据表命令修改数据表 ALTER TABLE ADD|ALTER TABLE ALTER COLUMN NULL|NOT NULL ALTER TABLEDROP CONSTRAINT 43例例3-13 在在S表中增加一个班号列和住址列。表中增加一个班号列和住址列。ALTER TABLE S ADDClass_No CHAR(6),Address CHAR(40)使用此方式增加的新列自动填充使用此方式增加的新列自动填充NULL值,所以不能为增加值,所以不能为增加的新列指定的新列指定NOT NULL约束。约束。例例3-14 在在SC表中增加完整性约束定义,使表中增加完整性约束定义,使Score在在0100之间。之间。ALTER TABLE SC ADD CONSTRAINT Score_Chk CHECK(Score BETWEEN 0 AND 100)44例例3-15 把把S表中的表中的SN列加宽到列加宽到10个字符。个字符。ALTER TABLE SALTER COLUMNSN CHAR(10)不能改变列名;不能改变列名;exec sp_rename 表名表名.原列名原列名,新列名新列名,column;不能将含有空值的列的定义修改为不能将含有空值的列的定义修改为NOT NULL约束;约束;若列中已有数据,则不能减少该列的宽度,也不能改变其数据若列中已有数据,则不能减少该列的宽度,也不能改变其数据类型;类型;存在冲突,则不能做此更改存在冲突,则不能做此更改只能修改只能修改NULL/NOT NULL约束,其他类型的约束在修改之前约束,其他类型的约束在修改之前必须先将约束删除,然后再重新添加修改过的约束定义。必须先将约束删除,然后再重新添加修改过的约束定义。例例3-16 删除删除S表中的主键。表中的主键。ALTER TABLE SDROP CONSTRAINT S_Prim Drop方式只用于删除完整性约束定义方式只用于删除完整性约束定义453.4.5 删除基本表删除基本表 用用SSMS删除数据表删除数据表 用用SQL命令删除数据表命令删除数据表 DROP TABLE 只能删除自己建立的表,不能删除其他用户所建的表只能删除自己建立的表,不能删除其他用户所建的表 463.4.6 查看数据表查看数据表 查看数据表的属性查看数据表的属性属性包括:数据表的名称,所有者,创建日期,文件属性包括:数据表的名称,所有者,创建日期,文件组,记录的行数,数据表中的字段名称、结构和类型组,记录的行数,数据表中的字段名称、结构和类型等。等。查看数据表中的数据查看数据表中的数据 在在SSMS中,用右键单击要查看数据的表,从快捷菜中,用右键单击要查看数据的表,从快捷菜单中选择单中选择“选择前选择前1000行行”或选择或选择“编辑前编辑前200行行”,或在查询窗口,使用,或在查询窗口,使用SELECT语句查看语句查看。473.5 创建与使用索引创建与使用索引 3.5.1 索引的作用索引的作用 3.5.2 索引的分类索引的分类 加快查询速度加快查询速度 保证行的惟一性保证行的惟一性 聚集索引与非聚集索引聚集索引与非聚集索引 唯一索引唯一索引 复合索引复合索引 聚集索引:查询速度快聚集索引:查询速度快非聚集索引:更新速度快非聚集索引:更新速度快排列的结果存储在表中排列的结果存储在表中 只有一个只有一个排列的结果不存储在表中排列的结果不存储在表中 可以有多个可以有多个有有UNIQUE,自动建立非聚集的惟一索引,自动建立非聚集的惟一索引有有PRIMARY KEY,自动建立聚集索引,自动建立聚集索引 将两个或多个字段组合起来建立的索引,将两个或多个字段组合起来建立的索引,单独的字段允许有重复的值单独的字段允许有重复的值483.5.3 创建索引创建索引 用用SSMS创建索引创建索引 用索引创建向导创建索引用索引创建向导创建索引 直接创建索引直接创建索引 用用SQL命令创建索引命令创建索引 CREATE UNIQUE CLUSTERED INDEX ON (次序次序 ,次序次序)建立惟一索引建立惟一索引 建立聚集索引建立聚集索引 ASC或或DESC,默认为,默认为ASC49例例3-18 为表为表SC在在SNo和和CNo上建立惟一索引。上建立惟一索引。CREATE UNIQUE INDEX SCI ON SC(SNo,CNo)例例3-19 为教师表为教师表T在在TN上建立聚集索引。上建立聚集索引。CREATE CLUSTERED INDEX TI ON T(TN)注意:注意:(1)改变表中的数据(如增加或删除记录)时,索引将自动)改变表中的数据(如增加或删除记录)时,索引将自动更新。更新。(2)索引建立后,在查询使用该列时,系统将自动使用索引)索引建立后,在查询使用该列时,系统将自动使用索引进行查询。进行查询。(3)索引数目无限制,但索引越多,更新数据的速度越慢。)索引数目无限制,但索引越多,更新数据的速度越慢。对于仅用于查询的表可多建索引,对于数据更新频繁的表对于仅用于查询的表可多建索引,对于数据更新频繁的表则应少建索引。则应少建索引。503.5.4 查看与修改索引查看与修改索引 用用SSMS查看和修改索引查看和修改索引 用用Sp_helpindex存储过程查看索引存储过程查看索引 Sp_helpindex objname=name 例例3-20 查看表查看表SC的索引。的索引。EXEC Sp_helpindex SC 表的名称表的名称 51用用Sp_rename存储过程更改索引名称存储过程更改索引名称 Sp_rename 数据表名数据表名.原索引名原索引名,原索引名原索引名 例例3-21 更改更改T表中的索引表中的索引TI名称为名称为T_Index。EXEC Sp_rename T.TI,T_Index,index 523.5.5 删除索引删除索引 用用SSMS删除索引删除索引 用用DROP INDEX命令删除索引命令删除索引 DROP INDEX数据表名数据表名.索引名索引名 例例3-22 删除表删除表SC的索引的索引SCI。DROP INDEX SC.SCI 不能删除由不能删除由CREATE TABLE 或或ALTER TABLE命令创建的命令创建的PRIMARY KEY或或UNIQUE约束索引,约束索引,也不能删除系统表中也不能删除系统表中的索引的索引 533.6 数据查询数据查询 3.6.1 SELECT命令的格式与基本使用命令的格式与基本使用SELECT ALL|DISTINCTTOP