【数据库】SQL 表、索引、视图的创建修改与删除

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 中字段 CityINT 类型;

sql 复制代码
ALTER TABLE <表名>[ADD<新列名><数据类型>[完整性约束条件]]
				  [MODIFY<列名><数据类型>];

删除表

sql 复制代码
-- 删除表S案例
DROP TABLE S;

删除表语句格式为:

sql 复制代码
DROP TABLE <表名>;

索引

数据库中的索引与书籍中的索引类似,在一本书中,利用索引可以快速地查找所需信息,而无须阅读整本书。在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需数据。书中的索引是一个词语列表,其中注明了包含各个词的页码。而数据库的索引则是某个表中一列或者若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。

建立索引

sql 复制代码
-- 建立索引案例
CREATE UNIQUE INDEX S-SNO ON S(Sno);

上述建立索引案例中,供应商 SSno 按升序建立索引。索引建立规则如下;

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

相关推荐
星空下的曙光4 分钟前
MySQL → SQL → DDL → 表操作 → 数据类型 知识链整理成一份系统的内容
数据库·sql·mysql
简单的话*8 分钟前
如何查看SQL Server的当前端口
数据库·sqlserver
独泪了无痕5 小时前
一文搞懂MyBatis中的TypeHandler
数据库·后端·mybatis
三体世界7 小时前
Mysql基本使用语句(一)
linux·开发语言·数据库·c++·sql·mysql·主键
Giser探索家8 小时前
低空智航平台技术架构深度解析:如何用AI +空域网格破解黑飞与安全管控难题
大数据·服务器·前端·数据库·人工智能·安全·架构
chillxiaohan8 小时前
GO学习记录五——数据库表的增删改查
数据库·学习·golang
一颗星的征途10 小时前
java循环分页查询数据,任何把查询到的数据,分批处理,多线程提交到数据库清洗数据
java·数据库·mysql·spring cloud
NightReader12 小时前
如何解决WordPress数据库表损坏导致的错误
数据库
Warren9812 小时前
MySQL,Redis重点面试题
java·数据库·spring boot·redis·mysql·spring·蓝桥杯
青鱼入云13 小时前
mysql查询中的filesort是指什么
数据库·mysql