我们直接来介绍SQL各条语句的功能和格式。
学生—课程数据库
我们以学生—课程数据库为例来讲解SQL的数据定义、数据操纵、数据查询和数据控制语句。
数据定义
关系数据库系统支持三季模式结构,其模式、外模式和内模式中的基本对象模式表、视图和索引等。因此SQL的数据定义功能包括模式定义、表定义、视图和索引的定义。
一个关系数据库管理系统的实例中可以建立多个数据库,一个数据库中可以建立多个模式,一个模式下通常包括多个表、视图和索引等数据库对象。
模式的定义与删除
1.模式定义
在SQL中模式定义语句如下:
CREATE SCHEMA <模式名> AUTHORIZATION<用户名>;
如果没有模式名那么模式名隐含为用户名。
要创建模式,调用该命令的用户必须拥有数据库管理员权限,或者获得了数据库管理员授予的CREATE SCHEMA的权限。
定义模式实际上定义了一个命名空间,在这个空间中可以进一步定义该模式包含的数据库对象,例如基本表、视图、索引等,即:CREATE SCHEMA <模式名>AUTHORIZATION <用户名>[<表定义子句>|<视图定义子句>|<授权定义子句>];
2.删除模式
在SQL中删除模式语句如下:
DROP SCHEMA <模式名>< CASCADE|RESTRICT>其中后两者必选其一,若选择前者表示在删除模式的同时把该模式中的所有数据库对象全部删除;若选择了后者就表示如果该模式中已经定义了下属的数据库对象,则拒绝该删除语句的执行。
基本表的定义、删除与修改
定义基本表:创建了一个模式就建立了一个数据库的命名空间,一个框架。在这个空间中首先要定义的是该模式包含的数据库基本表。
SQL语言使用CREATE TABLE语句定义基本表,其基本格式如下:
CREATE TABLE<表名>(<列名><数据类型>[列级完整性约束条件][,<列名><数据类型>[列级完整性约束条件]]…[,<表级完整性约束条件>]);
数据类型:在关系模型中每一个属性来自一个域,它的取值必须是域中的值;在SQL中域的概念用数据类型来实现。定义表的各个属性时需要指明其数据类型及长度,下面简单说明几种数据类型及相应的含义:
- CAHR(n),CAHRACTER(n):长度为n的定长字符串。
- VARCHAR(n)CHARACTERVARYING(n):最大长度为n的变长字符串。
- CLOB:字符串大对象。
- BLOB:二进制大对象。
- INT,INTEGER:长整数(4字节)
- SMALLINT:短整数(2字节)
- BIGINT:大整数(8字节)
- NUMERIC(p,d):定点数,由p位数(不包括符号、小数点)组成,小数点后面有d位数。
- DECIMAL(p,d),DEC(p,d):同上
- REAL:取决于机器精度的单精度浮点数
- DOUBLE PRECISION:取决于机器精度的双精度浮点数
- FLOAT(n):可选精度的浮点数,精度至少为n位数
- BOOLEAN:逻辑布尔量
- DATE:日期,包含年、月、日,格式为YYYY-MM-DD
- TIME:时间,包含时、分、秒,格式为:HH:MM:SS
- TIMESTAMP:时间戳类型
- INTERVAL:时间间隔类型
模式与表:每一个基本表都属于某一个模式,一个模式包含多个基本表;下面有三种方式定义基本表所属的模式:
- 在表中明显的给出模式名 CREATE TABLE”S-T”.Student(…);/Student所属的模式是S-T/。
- 在创建模式语句是创建表。
- 设置所属的模式,这样在创建表时表名中不必给出模式名。
修改基本表:修改语句如下
ALTER TABLE<表名>
[ADD[COLUMN]<新列名><数据类型>[完整性约束]]
[ADD<表级完整性约束>]
[DROP[COLUMN]<列名>[CASCADE] | RESTRICT]
[DROP CONSTRAINT<完整性约束名>[RESTRICT | CASCADE]]
[ALTER COLUMN<列名><数据类型>];
删除基本表: DROP TABLE[<表名>][RESTRICT | CASCADE];若选择前者RE..则该表不能存在依赖该表的对象;若选择后者,则没有限制条件,在删除表时相应的视图对象都被删除。
索引的建立与删除
建立索引是加快查询速度的有效手段;常见的索引包括顺序文件上的索引、B+树索引、散列、位图。
- 顺序文件:指针对按照指定属性值升序或降序存储的关系,在该属性上建立一个顺序索引文件,索引文件由属性值和相应的元组指针。
- B+树:将索引属性组织成B+树的形式,其叶节点为属性值和元组指针。
- 散列:建立若干个桶,将索引属性按照其散列函数值映射到相应桶中,桶中存放索引属性值和相应的元组指针。其也是查找速度最快的索引。
- 位图:用位向量记录索引属性中可能出现的值,每个位向量对应一个可能值。
索引属于内模式。
建立索引:CREATE[UNIQUE][CLUSTER]INDEX<索引名>
ON<表名>(<列名>[<次序>][,<列名>[<次序>]]…)
修改索引:ALTER INDEX<旧索引名>RENAME TO<新索引名>;
删除索引:DROP INDEX<索引名>。
数据字典
是关系数据库系统内部的异族系统表,记录了数据库中所有的定义信息,包括关系模式定义、试图定义、索引定义、完整性约束定义、各类用户对数据库的操作权限、统计信息等,在定义SQL数据定义语句时,实际上就是在更新数据字典中的相应信息。