SQL 表、索引、视图的创建修改与删除
SQL表操作,又称为SQL数据定义,包含对表、视图、索引的创建和删除。
基本表与视图:
基本表和试图都是表,有所不同的是基本表是实际存储在数据库中的表,视图是虚表,是从基本表或其他视图中导出的表。所以数据库中,存放的只有视图的定义,而不存放视图的数据。
基本表操作
创建表
sql
-- 创建案例
CREATE TABLE S(Sno CHAR(5) NOT NULL UNIQUE
,Sname CHAR(3) UNIQUE
,City CHAR(20)
,PRIMARY KEY(Sno));
根据上述创建表案例,有如下创建表格式:
sql
CREATE TABLE <表名>(<列名><数据类型>[列级完整性约束条件])
有如下对应键值:
bash
<表名>: S
<列名>: Sno, Sname, City
<数据类型>: CHAR(5)
[列级完整性约束条件]: NOT NULL UNIQUE
列级完整性约束条件有 NULL(空) 和 UNIQUE(取值唯一)两种,上述 NOT NULL UNIQUE
则表示取值唯一且不为空。
此外,需要关注 PRIMARY KEY(Sno)
代码的含义,定义了 Sno
为主码,主码自带属性唯一不为空。
修改表
sql
-- 修改表(增加列)
ALTER TABLE S ADD Zap CHAR(6);
-- 修改表(修改列)
ALTER TABLE S MODIFY City INT;
增加列案例中, 修改表 S
增加数据类型为 CHAR(6)
的新列 Zap
;
修改列案例中, 修改表 S
中字段 City
为 INT
类型;
sql
ALTER TABLE <表名>[ADD<新列名><数据类型>[完整性约束条件]]
[MODIFY<列名><数据类型>];
删除表
sql
-- 删除表S案例
DROP TABLE S;
删除表语句格式为:
sql
DROP TABLE <表名>;
索引
数据库中的索引与书籍中的索引类似,在一本书中,利用索引可以快速地查找所需信息,而无须阅读整本书。在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需数据。书中的索引是一个词语列表,其中注明了包含各个词的页码。而数据库的索引则是某个表中一列或者若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
建立索引
sql
-- 建立索引案例
CREATE UNIQUE INDEX S-SNO ON S(Sno);
上述建立索引案例中,供应商 S
中 Sno
按升序建立索引。索引建立规则如下;
sql
CREATE [UNIQUE][CLUSTER] INDEX <索引名> ON <表名>(<列名>[<次序>])
次序:可选 ASC(升序)、DSC(降序),默认值为 ASC
UNIQUE:表明此索引的每一个索引值只对应唯一的数据记录;
CLUSTER:表明要建立的索引是聚簇索引,意为索引项的顺序是与表中记录的物理顺序一致的索引组织。
P.s. 建立索引的优点:
- 大大加快数据的检索速度;
- 使用 ORDER BY 和 GROUP BY 子句进行检索数据时,显著减少查询中分组和排序的时间;
删除索引
sql
DROP INDEX <索引名>;
视图
视图是从一个或者多个基本表或视图中导出的表,其结构和数据建立在对表的查询基础上。所以视图不是真实存在的表,而是一个虚拟表。视图所对应的数据并不实际地存储在数据库中,而是存储在视图所引用的表中。视图的优点如下:
- 使用视图集中数据,根据用户定制内容显示;
- 屏蔽数据的复杂性,用户不必了解到数据库的结构就可以方便使用和管理数据;
视图的创建
sql
-- 创建视图的案例
CREATE VIEW CS-STUDENT
AS SELECT Sno,Sname,Sage,Sex
FROM STUDENT
WHERE SD='CS'
WITH CHECK OPTION;
视图的子查询,可以是复杂的 SELECT 语句,但是不允许含有 ORDER BY 子句和 DISTINCT 短语;
WITH CHECK OPTION
表示在对视图进行更新或者插入操作时,保证更新或者插入的行满足定义的 WHERE
条件;
视图的删除
sql
DROP VIEW CS-STUDENT;
删除视图 CS-STUDENT