1.SQL概述
SQL(Structured Query Language)结构化查询语言,是关系数据库的标准语言
SQL是一个通用的、功能极强的关系数据库语言
SQL的动词
基本概念
基本表 :本身独立存在的表; SQL中一个关系就对应一个基本表; 一个(或多个)基本表对应一个存储文件 ;一个表可以带若干索引。
存储文件 :逻辑结构组成了关系数据库的内模式; 物理结构是任意的,对用户透明。
视图: 从一个或几个基本表导出的表; 数据库中只存放视图的定义而不存放视图对应的数据 ;视图是一个虚表; 用户可以在视图上再定义视图。
2.数据定义
关系数据库系统支持三级模式结构,其模式、外模式、和内模式 中的基本对象有表、视图、和索引。因此SQL的数据定义功能包括: 模式定义、表定义、视图和索引的定义
模式:现代关系数据库管理系统提供了一个层次化的数据库对象命名机制
一个关系数据库管理系统的实例(Instance)中可以建立多个数据库, 一个数据库中可以建立多个模式, 一个模式下通常包括多个表、视图和索引等数据库对象。
master为数据库,新建的数据库会在该数据库的目录之下。
1.模式定义
定义模式实际上定义了一个命名空间 。
在这个空间中可以定义该模式包含的数据库对象,例如基本表、视图、索引等。
创建新数据库
CREATE DATABASE 数据库名 /*该系统不区分大小写*/
go /*开始运行*/
进入数据库
USE 数据库名
GO
将会从mater位置,转移到刚刚所建立数据库的位置。以下所有操作都在新建数据库下进行。
2.基本表的基本操作
以下以此表作为实例建立数据库
1.定义基本表
CREATE TABLE <表名>
(<列名> <数据类型>[ <列级完整性约束条件> ]
[,<列名> <数据类型>[ <列级完整性约束条件>] ]
…
[,<表级完整性约束条件> ] );
<表名>:所要定义的基本表的名字
<列名>:组成该表的各个属性(列)
<列级完整性约束条件>:涉及相应属性列的完整性约束条件
<表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件
如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。
CREATE TABLE Student
(Sno CHAR(8) PRIMARY KEY, /*Sno为主码*/
Sname VARCHAR(20) UNIQUE, /*Sname取唯一值*/
Ssex CHAR(6),
Sbirthdate Date,
Smajor VARCHAR(40)
);
CREATE TABLE Course
(Cno CHAR(5) PRIMARY KEY,
Cname VARCHAR(40) NOT NULL, /*Cname不为空*/
Ccredit SMALLINT,
Cpno CHAR(5),
FOREIGN KEY (Cpno) REFERENCES Course(Cno)
/*Cpno是外码,被参照表是Course,被参照列是Cno*/
);
CREATE TABLE SC
(Sno CHAR(8),
Cno CHAR(5),
Grade SMALLINT,
Semester CHAR(5),
Teachingclass CHAR(8),
PRIMARY KEY (Sno,Cno), /* 主码由两个属性构成,必须作为表级完整性进行定义*/
FOREIGN KEY (Sno) REFERENCES Student(Sno),
/* 表级完整性约束条件,Sno是外码,被参照表是Student */
FOREIGN KEY (Cno) REFERENCES Course(Cno)
/* 表级完整性约束条件, Cno是外码,被参照表是Course*/
);
SQL中域的概念用数据类型来实现
定义表的属性时, 需要指明其数据类型及长度 ,选用哪种数据类型 ,取值范围 ,要做哪些运算。
字符数据类型
精确数值数据类型
近似数数据类型
二进制数据类型
日期和时间数据类型
2.数据录入
INSERT INTO Student
values
('20180001','李勇','男','2004-3-8','信息安全'),
('20180002','刘晨','女','2003-9-1','计算机科学与技术'),
('20180003','王敏','女','2005-8-1','计算机科学与技术'),
('20180004','张立','男','2004-1-8','计算机科学与技术'),
('20180005','陈新奇','男','2005-11-1','信息管理与信息系统'),
('20180006','赵明','男','2004-6-12','数据科学与大数据技术'),
('20180007','王佳佳','女','2002-12-7','数据科学与大数据技术'),
('20180008','刘莎莎','女','2003-10-5','信息安全')
INSERT INTO Course
values
('81001','程序设计基础与C语言',4,NULL),
('81002','数据结构',4,'81001'),
('81003','数据库系统概论',4,'81002'),
('81004','信息系统概论',4,'81003'),
('81005','操作系统',4,'81001'),
('81006','Python语言',3,'81002'),
('81007','离散数学',4,NULL),
('81008','大数据技术概论',4,'81003'),
('81009','DB_Design',2,'81003')
INSERT INTO SC
values
('20180001','81001',85,'20192','81001-01'),
('20180001','81002',96,'20201','81002-01'),
('20180001','81003',87,'20202','81003-01'),
('20180002','81001',80,'20192','81001-02'),
('20180002','81002',98,'20201','81002-01'),
('20180002','81003',71,'20202','81003-02'),
('20180003','81001',81,'20192','81001-01'),
('20180003','81002',76,'20201','81002-02'),
('20180004','81001',56,'20192','81001-02'),
('20180004','81002',97,'20201','81002-02'),
('20180005','81003',68,'20202','81003-01'),
('20180006','81001',null,'20192','81001-02')
3.修改基本表
ALTER TABLE <表名>
[ ADD <新列名> <数据类型> [ 完整性约束 ] ]
[ ADD <表级完整性约束>]
[ DROP COLUMN <列名>]
[ DROP CONSTRAINT<完整性约束名>
[ALTER COLUMN <列名><数据类型> ] ;
<表名>是要修改的基本表
ADD子句用于增加新列、新的列级完整性约束条件和新的表级完整性约束条件
DROP COLUMN子句用于删除表中的列
DROP CONSTRAINT子句用于删除指定的完整性约束条件
ALTER COLUMN子句用于修改原有的列定义,包括修改列名和数据类型
不管基本表中原来是否已有数据,新增加的列一律为空值
4.删除基本表
DROP TABLE <表名>
若表上建有视图,表不能删除
5.索引的建立与删除
建立索引的目的:加快查询速度
关系数据库管理系统中常见索引: 顺序文件上的索引; B+树索引; 散列(hash)索引; 位图索引
特点: B+树索引具有动态平衡的优点; HASH索引具有查找速度快的特点
谁可以建立索引 :数据库管理员 或 表的属主(即建立表的人)
谁维护索引 :关系数据库管理系统自动完成
使用索引 :关系数据库管理系统自动选择合适的索引作为存取路径,用户不必也不能显式地选择索引
建立索引:
CREATE [UNIQUE] [CLUSTERED] INDEX <索引名>
ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…);
<表名>:要建索引的基本表的名字
索引:可以建立在该表的一列或多列上,各列名之间用逗号分隔
<次序>:指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASC
UNIQUE:此索引的每一个索引值只对应唯一的数据记录
CLUSTERED:表示要建立的索引是聚簇索引
CREATE CLUSTERED INDEX Stusname
ON Student(Sname);
在Student表的Sname(姓名)列上建立一个聚簇索引
在最经常查询的列上建立聚簇索引以提高查询效率
一个基本表上最多只能建立一个聚簇索引 ,经常更新的列不宜建立聚簇索引。
CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Coucno ON Course(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);
Student表按学号升序建唯一索引
Course表按课程号升序建唯一索引
SC表按学号升序和课程号降序建唯一索引
删除索引
DROP INDEX <索引名> ON <表名>;
删除索引时,系统会从数据字典中删去有关该索引的描述。
DROP INDEX Stusname on student;
删除Student表的Stusname索引
6.数据字典
数据字典是关系数据库管理系统内部的一组系统表,它记录了数据库中所有定义信息: 关系模式定义; 视图定义 ;索引定义 ;完整性约束定义 ;各类用户对数据库的操作权限 ;统计信息等。
关系数据库管理系统在执行SQL的数据定义语句时,实际上就是在更新数据字典表中的相应信息。