3.46k likes | 3.67k Views
第三章 关系数据库标准语言 SQL. 3.1 SQL 概述 3.2 数据定义 3.3 查询 3.4 数据更新 3.5 视图 3.6 数据控制 3.7 程序接口式 SQL. 3.1 SQL 概述. 1974 年由 Boyce 和 Chamberlin 提出的。 1975 年至 1979 年 IBM 公司 san Jose Research Laboratory 研制的关系数据库管理系统原形系统 System R 实现了这种语言。. 3.1 SQL 概述.
E N D
第三章关系数据库标准语言SQL 3.1 SQL概述 3.2 数据定义 3.3 查询 3.4 数据更新 3.5 视图 3.6 数据控制 3.7 程序接口式SQL
3.1 SQL概述 • 1974年由Boyce和Chamberlin提出的。 • 1975年至1979年IBM公司san Jose Research Laboratory 研制的关系数据库管理系统原形系统System R 实现了这种语言。
3.1 SQL概述 • 结构化查询语言(structured query language,简称SQL)是一种介于关系代数与关系演算之间的语言,其功能包括查询、操纵、定义和控制4个方面,是一个通用、功能极强的关系数据库语言。目前已成为关系数据库的标准语言 • 大多数数据库均用SQL作为共同的数据存取语言和标准接口,使不同数据库系统之间的互操作有了共同的基础。
3.1 SQL概述 • 第一个SQL标准是1986年10月由美国国家标准局(American National Standard institute,简称ANSI)公布的,所以也称该标准为SQL-----86。 • 1989年国际标准化组织(International Organization for Standardization,简称ISO)标准(SQL-89) • 1992年又公布了SQL-92标准。 • 目前 新的SQL标准:SQL3
3.1 SQL概述 3.1.1 SQL的特点 3.1.2 SQL语言的基本概念
3.1.1 SQL的特点 • 1. 综合统一 • 非关系模型的数据语言一般都分为: • 模式数据定义语言(schemadata definition language:DDL):用于定义模式、外模式、内模式 • 数据存储有关的描述语言(data strorage description language,简称DSDL):进行数据的存取 • 数据操纵语言(data manipulation language,简称DML)进行数据的处置 • SQL语言集DDL、 DSDL、 DML于一体,风格一致
3.1.1 SQL的特点 • 2. 高度非过程化 • 只提“做什么”,不必指明“怎么做”——用户无需了解存取路径及物理地址——减轻用户负担,提高效率。 • 3. 面向集合的操作方式 • 不仅查找结果可以是集合,插入,删除, 更新也可以是元组,比非关系DBMS优越
3.1.1 SQL的特点 • 4. 以同一种语法结构提供两种使用方法 • 自含式:联机交互使用 • 程序接口:与高级语言联合 • 5. 语言简洁,易学易用
3.1 SQL概述 3.1.1 SQL的特点 3.1.2 SQL语言的基本概念
3.1.2 SQL语言的基本概念 • SQL语言支持关系数据库三级模式结构 • 其中外模式对于视图(view)和部分基本表(base table),模式对应于基本表,内模式对应用存储文件。
SQL 视图1 视图2 外模式 基本表1 基本表2 基本表3 基本表4 模式 存储文件1 存储文件2 存储模式 3.1.2 SQL语言的基本概念
3.1.2 SQL语言的基本概念 1.基本表是本身独立存在的表,即实际存在DB中的表,而不是从其它表导出的。 特性: • 在关系数据库中一个关系对应一个表 • 基本表可以有若干个索引 • 存储特点: • 一个基本表可以跨一个或若干个存储文件 • 一个存储文件可以存储一个或多个基本表 • 一个存储文件与外存储器上的一个物理文件相对应 • 存储文件和相关索引组成了关系的内模式(存储模式) • 基本表的集合组成关系模型,即全局概念模型
3.1.2 SQL语言的基本概念 2.视图(View):从一个或几个基本表或其它视图导出来的表。 特性: • 视图本身并不独立存储数据,系统只保存视图的定义 • 从用户的观点出发,基本表和视图都是关系,用SQL一样访问,只是对视图的修改受到一定限制 • 视图可以当作用户按照应用需要定义的外模式,即用户的局部数据—逻辑结构。
第三章关系数据库标准语言SQL 3.1 SQL概述 3.2 数据定义 3.3 查询 3.4 数据更新 3.5 视图 3.6 数据控制 3.7程序接口式SQL
3.2 数据定义 • 关系数据库的基本对象是表、视图和索引。 • SQL的数据定义功能包括定义表、定义视图和定义索引。
3.2 数据定义 3.2.1 定义、删除与修改基本表 3.2.2 建立与删除索引 3.2.3 建立FOREIGN KEY
3.2.1 定义、删除与修改基本表 1.定义基本表 CREATE TABLE <表名> (<列名> <数据类型>[ <列级完整性约束条件> ] [,<列名> <数据类型>[ <列级完整性约束条件>] ] … [,<表级完整性约束条件> ] ); • <表名>:所要定义的基本表的名字 • <列名>:组成该表的各个属性(列) • <列级完整性约束条件>:涉及相应属性列的完整性约束条件 • <表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件
3.2.1 定义、删除与修改基本表 [例1] 建立一个“学生”表Student,它由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成。其中学号不能为空,值是唯一的,并且姓名取值也唯一。 CREATE TABLE Student (Sno CHAR(5) NOT NULL UNIQUE, Sname CHAR(20) UNIQUE, Ssex CHAR(1) , Sage INT, Sdept CHAR(15));
3.2.1 定义、删除与修改基本表 • 常用完整性约束 • 主码约束: PRIMARY KEY • 唯一性约束:UNIQUE • 非空值约束:NOT NULL • 参照完整性约束 PRIMARY KEY与UNIQUE的区别?
3.2.1 定义、删除与修改基本表 • [例2] 建立一个“学生选课”表SC,它由学号Sno、课程号Cno,修课成绩Grade组成,其中(Sno, Cno)为主码。 • CREATE TABLE SC( • Sno CHAR(5) , • Cno CHAR(3) , • Grade int, • Primary key (Sno, Cno));
标识符列 • 标识符列是唯一标识表中每一行数据的符号。 • 在Microsoft SQL Server 2008系统中,可以创建两种类型的标识符列 • IDENTITY列 • ROWGUIDCOL列
IDENTITY • 使用IDENTITY属性的列是IDENTITY列,每一个表中最多只能有一个IDENTITY列。 • 定义IDENTITY属性时需要指定两个值:种子值和增量值。 • 表中第一行的IDENTITY列的值是种子值,其他行IDENTITY列的值是在前一行的值的基础上增加一个增量值得到的。 • IDENTITY属性的语法形式如下所示: • IDENTITY (seed, increment)
ROWGUIDCOL • ROWGUIDCOL列是全局唯一标识符列。 • 每一个表中最多允许创建一个ROWGUIDCOL列。 • 从理论上来看,分布在Internet上的两个不同的计算机中的ROWGUIDCOL列的值出现相同的现象的概率是微乎其微的。 • 在创建表时,可以使用UNIQUEIDENTIFIER数据类型定义ROWGUIDCOL列。
查看表的信息 • 表创建之后,可以使用许多函数、存储过程查看有关表的各种信息。 • COLUMNPROPERTY函数用于查看有关表中的列的信息,这些信息包括是否为空、是否是计算得到的列、是否具有IDENTITY属性、是否ROWGUIDCOL列等。 • sp_depends存储过程用于查看指定表的依赖对象,这些依赖对象包括依赖于表的视图、存储过程等。 • sp_help存储过程用于查看有关表结构的信息
3.2.1 定义、删除与修改基本表 • 不同数据库系统支持的数据类型不同。 • 如IBM DB2支持的数据类型(常用): CHAR(n) 字符 INTEGER 全字长整数 SMALLINT 半字长整数 DECIMAL(x,y)十进制数 FLOAT(x,y)双字长浮点数 Date 日期 作业:写出SQL Server支持的5种数据类型
3.2.1 定义、删除与修改基本表 2.修改基本表 • 随着应用环境和用户需求的变化,有时需要修改已建立好的基本表,包括增加新列、增加新的完整性约束条件、修改原有的列定义或删除已有的完整性约束条件等。
3.2.1 定义、删除与修改基本表 ALTER TABLE <表名> [ ADD <新列名> <数据类型> [ 完整性约束 ] ] [ DROP <完整性约束名> ] [ MODIFY <列名> <数据类型> ]; • <表名>:要修改的基本表 • ADD子句:增加新列和新的完整性约束条件 • DROP子句:删除指定的完整性约束条件 • MODIFY子句:用于修改列名和数据类型
3.2.1 定义、删除与修改基本表 [例2] 向Student表增加“入学时间”列,其数据类型为日期型。 ALTER TABLE Student ADD Scome DATE; • 不论基本表中原来是否已有数据,新增加的列一律为空值。
增加或删除列 • 当用户向表中增加一个新列时,Microsoft SQL Server为表中该列在已有数据的每一行中的相应位置插入一个数据值。 • 因此,向表中增加一个新列时,最好为该列定义一个默认约束,使该列有一个默认值。如果该新列没有默认约束,并且表中已经有了其他数据,那么必须指定该新列允许空值,否则,系统将产生一个错误信息。
[例3] 将年龄的数据类型改为半字长整数。 ALTER TABLE Student MODIFY Sage SMALLINT; • 注:修改原有的列定义有可能会破坏已有数据 [例4] 删除学生姓名必须取唯一值的约束。 ALTER TABLE Student DROP UNIQUE(Sname);
3.2.1 定义、删除与修改基本表 • 删除属性列 直接/间接删除 • 把表中要保留的列及其内容复制到一个新表中 • 删除原表 • 再将新表重命名为原表名 直接删除属性列:(新) 例:ALTER TABLE Student Drop Scome;
3.2.1 定义、删除与修改基本表 3.删除基本表 DROP TABLE <表名>; 基本表删除 数据、表上的索引都删除 表上的视图往往仍然保留,但 无法引用 删除基本表时,系统会从数据字典中删去有关该 基本表及其索引的描述 (标准中没有,认为表建立后就永久存在)
3.2.1 定义、删除与修改基本表 [例5] 删除Student表 DROP TABLEStudent ;
3.2 数据定义 3.2.1 定义、删除与修改基本表 3.2.2 建立与删除索引 3.2.3 建立FOREIGN KEY
3.2.2 建立与删除索引 • 创建索引可以大大提高系统的性能 • 创建唯一性索引,可以保证每一行数据的唯一性 • 可以大大加快数据的检索速度 • 可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义 • 在使用ORDER BY和GROUP BY子句进行数据检索时,可以显著减少查询中分组和排序的时间 • 通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
3.2.2 建立与删除索引 • 在Microsoft SQL Server系统中,可管理的最小空间是页。一个页是8KB字节的物理空间。插入数据的时候,数据就按照插入的时间顺序被放置在数据页上。 • 一般地,放置数据的顺序与数据本身的逻辑关系之间没有任何联系。 • 从数据之间的逻辑关系方面来讲,数据是乱七八糟堆放在一起的。 • 数据的这种堆放方式称为堆。当一个数据页上的数据堆放满之后,数据就得堆放在另外一个数据页上,称为页分解。
3.2.2 建立与删除索引 堆结构示意图
3.2.2 建立与删除索引 • 索引机制 • 索引表 • 检索机制 • 维护机制 • 索引不利的一面 • 创建索引和维护索引要耗费时间 • 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚集索引,需要的空间就会更大 • 对表中的数据进行增加、删除和修改时,索引也要动态地维护,这样就降低了数据的维护速度。
3.2.2 建立与删除索引 • 两种基本的索引类型: • 聚集索引 • 非聚集索引 • 除此之外,还有唯一性索引、包含性列索引、索引视图、全文索引、XML索引等。 • 堆 • 是不含聚集索引的表,表中的数据没有任何的顺序
3.2.2 建立与删除索引 • 聚集索引(簇索引) • 一种数据表的物理顺序与索引顺序相同的索引 • 每个表只允许建立一个簇索引,由于在建立簇索引时要改变表中数据行的物理顺序,所以应在其它非簇索引建立之前建立簇索引,以免引起SQL Server重新构造非簇索引