作者:whisper
链接:http://proprogrammar.com:443/article/558
声明:请尊重原作者的劳动,如需转载请注明出处
SQL(Structured Query Language)
结构化查询语言,是关系数据库的标准语言
SQL历史
SQL标准的进展过程
目前,没有一个数据库系统能够支持SQL标准的所有概念和特性
SQL的特点
SQL示例
综合统一
定义和修改、删除关系模式,定义和删除视图,插入数据,建立数据库; 对数据库中的数据进行查询和更新; 数据库重构和维护 数据库安全性、完整性控制,以及事务控制 嵌入式SQL和动态SQL定义
高度非过程化
面向集合的操作方式
以同一种语法结构提供多种使用方式
能够独立地用于联机交互的使用方式
SQL能够嵌入到高级语言(例如C, C++, Java)程序中,供程序员设计程序时使用
语言简洁,易学易用
SQL的基本概念
SQL支持关系数据库三级模式结构
基本表
存储文件
视图
学生-课程 数据库
示例数据库
学生-课程模式 S-T :
学生表: Student(Sno,Sname,Ssex,Sage,Sdept)
课程表: Course(Cno,Cname,Cpno,Ccredit)
学生选课表: SC(Sno,Cno,Grade)
Student表
Course表
SC表
数据定义
SQL的数据定义功能: 定义各种数据库的“对象”
各种数据库“对象”
现代关系数据库管理系统提供了一个层次化的数据库对象命名机制
数据字典
数据字典是关系数据库管理系统内部的一组系统表,它记录了数据库中所有对象的定义信息以及一些统计信息:
关系数据库管理系统在执行SQL的数据定义语句时,实际上就是在更新数据字典表中的相应信息。
数据定义
1 模式定义
2 表定义
3 索引定义
1. 定义模式
[例3.1] 为用户WANG定义一个学生-课程模式S-T
CREATE SCHEMA “S-T” AUTHORIZATION WANG;
[例3.2] CREATE SCHEMA AUTHORIZATION WANG;
该语句没有指定<模式名>, <模式名>隐含为<用户名>
定义模式实际上定义了一个命名空间(或者说目录) 。
在这个空间中可以定义该模式包含的数据库对象,例如基本表、视图、索引等。
在CREATE SCHEMA中可以接受CREATE TABLE,CREATE VIEW和GRANT子句。
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>[<表定义子句>|<视图定义子句>|<授权定义子句>]
[例3.3]为用户ZHANG创建了一个模式TEST,并且在其中定义一个表TAB1
CREATE SCHEMA TEST AUTHORIZATION ZHANG
CREATE TABLE TAB1 ( COL1 SMALLINT,
COL2 INT,
COL3 CHAR(20),
COL4 NUMERIC(10,3),
COL5 DECIMAL(5,2)
);
删除模式
DROP SCHEMA <模式名> <CASCADE|RESTRICT>
CASCADE(级联)
删除模式的同时把该模式中所有的数据库对象全部删除
RESTRICT(限制)
如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。
仅当该模式中没有任何下属的对象时才能执行。
[例3.4] DROP SCHEMA ZHANG CASCADE;
删除模式ZHANG
同时该模式中定义的表TAB1也被删除
2 基本表的定义
定义基本表
学生表Student
[例3.5] 建立“学生” 表Student。 学号是主码, 姓名取值唯一。
课程表Course
[例3.6 ] 建立一个“课程”表Course
学生选课表SC
[例3.7] 建立一个学生选课表SC
CREATE TABLE SC
(Sno CHAR(9),
Cno CHAR(4),
Grade SMALLINT,
PRIMARY KEY (Sno,Cno),
/* 主码由两个属性构成,必须作为表级完整性进行定义*/
FOREIGN KEY (Sno) REFERENCES Student(Sno),
/* 表级完整性约束条件, Sno是外码,被参照表是Student */
FOREIGN KEY (Cno)REFERENCES Course(Cno)
/* 表级完整性约束条件, Cno是外码,被参照表是Course*/
数据类型
关系模型中“域”的概念用数据类型来实现
定义表的属性时需要指明其数据类型及长度
选用哪种数据类型
模式与表
每一个基本表需属于某个模式
定义基本表所属模式的方式:
Create table"S-T".Student(......); /*模式名为 S-T*/
Create table "S-T".Cource(......);
Create table "S-T".SC(......);
创建基本表(其他数据库对象也一样)时,若没有指定模式,系统根据搜索路径来确定该对象所属的模式
关系数据库管理系统会以“搜索路径”指向的模式作为数据库对象的模式名
设置搜索路径的方式:
SET search_path TO "S-T",PUBLIC;
修改基本表
ALTER TABLE <表名>
[ADD[COLUMN] <新列名> <数据类型> [ 完整性约束 ] ]
[ADD <表级完整性约束>]
[DROP [ COLUMN ] <列名> [CASCADE| RESTRICT] ]
[DROP CONSTRAINT<完整性约束名>[ RESTRICT | CASCADE ] ]
[ALTER COLUMN <列名><数据类型> ] ;
<表名>是要修改的基本表
ADD子句用于增加新列、新的列级完整性约束条件和新的表级完整性约束条件
DROP COLUMN子句用于删除表中的列
DROP CONSTRAINT子句用于删除指定的完整性约束条件
ALTER COLUMN子句用于修改原有的列定义,包括修改列名和数据类型
[例3.8] 向Student表增加“入学时间” 列, 其数据类型为日期型
ALTER TABLE Student ADD S_entrance DATE;
不管基本表中原来是否已有数据,新增加的列一律为空值
[例3.9] 将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。
ALTER TABLE Student ALTER COLUMN Sage INT;
[例3.10] 增加课程名称必须取唯一值的约束条件。
ALTER TABLE Course ADD UNIQUE(Cname);
删除基本表
DROP TABLE <表名>[RESTRICT| CASCADE] ;
RESTRICT:删除表是有限制的。
CASCADE:删除该表没有限制。
[例3.11] 删除Student表
DROP TABLE Student CASCADE;
基本表定义被删除,数据被删除
表上建立的索引、视图、触发器等一般也将被删除
DROP TABLE时, SQL2011 与 3个RDBMS的处理策略比较
R表示RESTRICT , C表示CASCADE
'×'表示不能删除基本表, '√'表示能删除基本表,‘保留’表示删除基本表后,还保留依赖对象
3 索引的定义
建立索引的目的:加快查询速度
关系数据库管理系统中常见索引:
特点:
索引
谁可以建立索引
谁维护索引
使用索引
(1) . 建立索引
语句格式
CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…);
<表名>: 要建索引的基本表的名字
索引:可以建立在该表的一列或多列上, 各列名之间用逗号分隔
<次序>: 指定索引值的排列次序, 升序: ASC, 降序: DESC。 缺省值: ASC
UNIQUE: 此索引的每一个索引值只对应唯一的数据记录
CLUSTER: 表示要建立的索引是聚簇索引
[例3.13] 为学生-课程数据库中的Student, Course, SC三个表建立索引。 Student表按学号升序建唯一索引, Course表按课程号升序建唯一索引, SC表按学号升序和课程号降序建唯一索引
CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Coucno ON Course(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);
(2)修改索引
ALTER INDEX <旧索引名> RENAME TO <新索引名>
[例3.14] 将SC表的SCno索引名改为SCSno
ALTER INDEX SCno RENAME TO SCSno;
(3)删除索引
DROP INDEX <索引名>;
删除索引时,系统会从数据字典中删去有关该索引的描述。
[例3.15] 删除Student表的Stusname索引
DROP INDEX Stusname;
亲爱的读者:有时间可以点赞评论一下
全部评论