主要内容

  • SQL概述

1. SQL的发展

2. SQL的优点

3. SQL的基本概念

  • SQL的常用数据类型
  • 数据定义

1. 模式的定义与删除

2. 基本表的定义、删除和修改

3. 索引的建立和删除


SQL概述

1. SQL的发展

结构化查询语言(Structured Query Language,SQL)集数据查询数据操纵数据定义数据控制功能于一体,它的标准自公布以来随数据库技术的发展而不断丰富完善。

自SQL成为国际标准语言后,各个数据库厂家纷纷推出各自的SQL软件或与SQL的接口软件。这就使大多数数据库均用SQL作为共同的数据存取语言和标准接口,使不同数据库系统之间的操作有了共同的基础。

SQL之所以能够为用户和业界所接受并成为国际标准,是因为它是一个综合的、功能极强同时又简洁易学的语言。

但尽管SQL的标准在不断发展,目前还没有一个数据库系统能够支持SQL标准的所有概念和特性。大部分数据库系统能支持SQL/92标准中的大部分功能以及SQL99SQL2003中的部分新概念。同时,许多软件厂商对SQL基本命令集还进行了不同程度的扩充和修改,又可以支持标准以外的一些功能特性。

接下来我们将会了解SQL的基本概念和功能。

2. SQL的优点

(1)综合统一:非关系数据语言分多钟语言以完成不同的操作,而且需要修改模式时,必须停止数据库的运行,修改后要重装数据库,十分麻烦。相比之下,SQL集数据查询、数据操纵、数据定义和数据控制功能于一体,语言风格统一,可以独立完成数据库生命周期的全部活动,这就为数据库应用系统的开发提供了良好的环境。特别是用户在数据库系统投入运行后,还可以根据需要随时地、逐步地修改模式,而不影响数据库的运行,使得数据库系统具有良好的可扩展性。

(2)高度非过程化:非关系数据模型需要指明存取路径,而用SQL进行数据操作时,只要提出“做什么”,而无须指明“怎么做”,数据的存取由系统自动完成。这不但大大减少了用户负担,而且有利于提高数据独立性。

(3)面向集合:非关系数据模型的操作对象是一条记录,而SQL的操作对象是元组的集合,哪个比较高效一目了然。

(4)SQL既可以作为独立语言,又可以作为嵌入式语言:作为独立语言,用户可以在终端键盘上直接键入SQL命令来对数据库进行操作;作为嵌入式语言,它可以嵌入到高级语言(例如C、C++、Java等)程序中,供程序猿使用。关键是,两种使用方式下SQL的语法结构基本一致,因此提供了极大的灵活性和方便性。

(5)简洁易学!:学习语言最怕就是要背的东西多,而SQL语言十分简洁,完成核心功能只用了9个动词,而且接近英语口语,相当易学。数据查询(SELECT)、数据定义(CREAT,DROP,ALTER)、数据操纵(INSERT,UPDATE,DELETE)和数据控制(GRANT,REVOKE)。

3. SQL的基本概念

SQL支持关系数据库系统的三级模式结构,其中外模式包括若干视图(view)和部分基本表(base table),模式包括若干基本表,内模式包括若干存储文件(stored file)。

用户可以用SQL对基本表视图进行查询或其他操作,基本表和视图都是关系(二维表)。

基本表是独立存在的,在关系数据库管理系统中,一个关系对应一个基本表一个或多个基本表对应一个存储文件。一个表可以带若干索引,索引也存放在存储文件中

存储文件的逻辑结构组成了关系数据库的内模式。

视图是从一个或几个基本表或视图中导出的表,它本身并不独立存在,数据库中只存放视图的定义,而不存放它对应的数据,数据仍存放在原来的基本表中,因此视图只是一个虚表。


SQL的常用数据类型

数据类型 含义
CHAR(n) 长度为n的定长字符串
VARCHAR(n) 最大长度为n的变长字符串
INT 长整型(4字节)
SMALLINT 短整型(2字节)
BIGINT 大整型(8字节)
FLOAT(n) 可选精度的浮点数,精度至少为n位数字
BOOLEAN 逻辑布尔量
DATE 日期(YYYY-MM-DD)
TIME 时间(HH:MM:SS)

数据定义

SQL的数据定义语句
操作对象 操作方式
创建 删除 修改
模式 CREAT SCHEMA DROP SCHEMA  
CREAT TABLE DROP TABLE ALTER TABLE
视图 CREAT VIEW DROP VIEW  
索引 CREAT INDEX DROP INDEX ALTER INDEX

需要注意的是,SQL标准不提供修改模式和视图定义的语句,如果用户要修改模式或视图,只能先将它们删除然后重建。SQL标准也没有提供索引相关的语句,但为了提高查询效率,商用关系数据库管理系统都提供了索引机制。

在早期的数据库系统中,所有数据库对象都属于一个数据库,也就是说只有一个命名空间。而现代的关系数据管理系统提供了一个层次化的数据库对象命名机制。

一个关系数据库管理系统的实例中可以建立多个数据库,一个数据库中可以建立多个模式,一个模式下通常包括多个表、视图和索引等数据库对象:数据库【模式(表、视图和索引)】

1. 模式的定义与删除

(1)定义模式:CREATE SCHEMA <模式名> AUTHORIZATION <用户名> [<表定义子句>|<视图定义子句>|<授权定义子句>];

定义模式实际上定义了一个命名空间,在这个空间中可以进一步定义该模式包含的数据库对象,例如基本表、视图、索引等。

如果模式定义语句中没有指定<模式名>,<模式名>隐含为<用户名>。

例如:

用户WANG定义一个模式TEST,并且在其中定义一个表TAB

CREATE SCHEMA TEST AUTHORIZATION WANG

CREATE TABLE TAB(COL1 SMALLINT, COL2 INT);

(2)删除模式:DROP SCHEMA <模式名> <CASCADE|RESTRICT>;

CASCADE(级联),表示在删除模式的同时,把模式中的所有数据库对象删除;RESTRICT(限制),表示如果模式中定义了数据库对象,则拒绝该删除语句的执行。

2. 基本表的定义、删除和修改

(1)定义基本表:CREATE TABLE <表名> (<列名><数据类型> [列级完整性约束条件]...[表级完整性约束条件]);

建表的同时通常可以定义与该表有关的完整性约束条件,表的定义以及约束条件会被存放在数据字典中。

*数据字典是关系数据库管理系统的一组系统表,记录了数据库中所有的定义信息。关系数据库管理系统在执行SQL的数据定义语句时,实际上就是在更新数据字典中相应的信息。

例如:

建立一个“学生”表Student,定义各列数据类型以及完整性约束条件

CREATE TABLE Student

(Sno CHAR(9) PRIMARY KEY,            /*列级完整性约束条件,Sno是主码*/

Sname CHAR(20) UNIQUE,                 /*列级完整性约束条件,Sname取唯一值*/

Ssex CHAR(2) NOT NULL,                  /*列级完整性约束条件,Ssex不能取空值*/

Sage SMALLINT,

Sdept VARCHAR(20),

Cpno CHAR(4),                                       /*先定义Cpno的数据类型才能再将它设为外键*/

FOREIGN KEY (Cpno) REFERENCES Course (Cno)

 /*表级完整性约束条件,Cpno是外码,被参照表是Course,被参照列是Cno*/ 

/*上面看不太懂的同学请翻到《数据库知识整理 - 关系数据库》看下“关系的完整性”的部分*/

);

区分列级完整性约束条件表级完整性约束条件的方法比较简单——看约束条件短语的位置:在子句结尾是作为列级完整性约束条件,而在子句开头是作为表级完整性约束条件。

比如主码由两个属性构成:

PRIMARY KEY(Sno,Cno),

(2)定义基本表所属的模式有两种较简单的方法。一种方法是定义模式的同时定义基本表,就像上面定义模式的例子;另一种方法是在表名中直接给出:

CREATE TABLE "S-T".Student(...);

(3)修改基本表:ALTER TABLE <表名> [操作子句] ;

修改基本表主要有4个操作子句:

<1> ADD子句用于增加新列或新的完整性约束条件。如:

Student表中增加“entrance(入学时间)”列ALTER TABLE Student ADD entrance DATE;

增加课程名称必须取唯一值的约束条件ALTER TABLE Student ADD UNIQUE(Cname);

<2> DROP COLUMN子句用于删除表中的列。如果指定了CASCADE短语,则自动删除引用了该列的所有对象,比如视图;如果指定了RESTRICT短语,则如果该列被其他对象引用,拒绝删除操作。

<3> ALTER COLUMN子句用于修改列原有的定义,包括列名和数据类型。如:

年龄的数据类型从字符型转为整型ALTER TABLE Student ALTER COLUMN Sage INT;  /*相当于直接覆盖*/

<4>DROP CONSTRAINT子句用于删除完整性约束条件。

(4)删除基本表:DROP TABLE <表名> [RESTRICT|CASCADE];

RESTRICT是有条件的删除,存在任何依赖该表的对象,该表都不能被删除;CASCADE是无条件的删除,删除表的同时,所有依赖该表的对象也自动删除。

默认情况下是RESTRICT

3. 索引的建立和删除

当表的数据量比较大时,建立索引是加快查询速度的有效手段。索引虽然能够加速数据库查询,但需要占用一定的存储空间。当基本表更新时,索引需要进行维护,这样又增加了数据库的负担,所以要有选择地创建索引。

索引建立在基本表的一列或多列上。

(1)建立索引:CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名> (<列名> [<次序>]);

UNIQUE表明此索引的每一个索引值只对应唯一的数据记录;CLUSTER表示要建立聚簇索引,这里暂时不作过多介绍。

<次序>有两种:ASC(升序)和DESC(降序),默认值为ASC。

举栗子:

为学生-课程数据库中的Student、Course和SC三个表建立索引。Student和Course表按学号(课程号)升序唯一索引,SC表按学号升序,课程号降序建立唯一索引。

CREATE UNIQUE INDEX Stusno ON Student(Sno);

CREATE UNIQUE INDEX Cousno ON Course(Cno);

CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);

(2)修改索引:ALTER INDEX <旧索引名> RENAME TO <新索引名>;

(3)删除索引:DROP INDEX <索引名>;


路过的圈毛君:“这里介绍的只是SQL的基本概念和基础功能。对于SQL语言,不同的数据库产品在处理策略上可能会与SQL的国际标准有所差别,所以使用具体的数据库系统时以用户手册的说明为准。”

数据库知识整理 - 关系数据库标准语言SQL(一)- SQL概述与数据定义相关推荐

  1. (数据库系统概论|王珊)第三章关系数据库标准语言SQL-第二、三节:数据定义

    文章目录 零:有关说明 (1)安装数据库与建表 (2)一些语法说明 一:模式的定义和删除(SCHEMA) (1)定义模式 (2)删除模式 二:基本表的定义.删除和修改(TABLE) (1)定义基本表 ...

  2. 【数据库系统】第一部分 数据库基础(3) 关系数据库标准语言SQL(3) 数据定义

    本文属于「数据库系统」系列文章之一,这一系列着重于「数据库系统知识的学习与实践」.由于文章内容随时可能发生更新变动,欢迎关注和收藏数据库系统系列文章汇总目录一文以作备忘.需要特别说明的是,为了透彻理解 ...

  3. 【数据库系统设计】关系数据库标准语言SQL(3)

    关系数据库标准语言SQL 数据更新 插入数据 插入元组 插入子查询结果 修改数据 修改某一个元组值 删除数据 删除某一个元组的值 删除多个元组的值 带子查询的删除语句 空值的处理 空值的产生 空值的判 ...

  4. 【数据库系统设计】关系数据库标准语言SQL(2)

    关系数据库标准语言SQL 数据查询(连接查询) 等值连接 `=` 自然连接 自身连接 外连接 `LEFR/RIGHT JOIN ... ON` 多表连接 数据查询(嵌套查询 ) 带有`IN`谓词的子查 ...

  5. 【数据库系统设计】关系数据库标准语言SQL(1)

    关系数据库标准语言SQL SQL介绍 SQL的特点 SQL中基本概念 示例:学生-课程 数据库 数据定义 SCHEMA定义 基本表定义(重点) 定义基本表(关系模式) 数据类型 定义基本表示例 修改基 ...

  6. 笔记:SQL概述及数据定义(模式SCHEMA、表TABLE、索引INDEX)

    SQL概述及数据定义(模式SCHEMA.表TABLE.索引INDEX)的学习笔记.修改与补充 目录 0.前言 1.思维导图 2.SQL概述 (1)什么是SQL? (2)SQL的特点 (3) SQL的基 ...

  7. 【一周入门MySQL—1】数据库概述、数据定义、数据操作

    数据库概述.数据定义.数据操作 一.数据库概述 数据库基础概念:按照一定的数据结构来组织.存储和管理数据的仓库. 企业数据存储面临的问题: 存储大量数据: 大量数据的检索和访问: 保证数据信息的一致性 ...

  8. 关系数据库标准语言SQL(SQL概述、数据定义、创建数据库,索引等)

    关系数据库语言SQL 一.SQL概述 SQL(Structured Query Language)结构化查询语言,是关系数据库的标准语言 SQL是一个通用的.功能极强的关系数据库语言. 1 .SQL ...

  9. 数据库题目之关系数据库标准语言SQL

    一.选择题 1.SQL语言是的语言,易学习. A.过程化 B.非过程化 C.格式化 D.导航式 [答案:]B 2.SQL语言是语言. A.层次数据库 B.网络数据库 C.关系数据库 D.非数据库 [答 ...

最新文章

  1. 关于.NET玩爬虫这些事 【初码干货】
  2. 用v-for循环动态定位坐标显示元素,并遍历元素的left和top坐标位置(只需要用到元素的宽高、索引、每行显示数量)
  3. python有趣代码-一个有意思的 Python 训练项目集
  4. 【数据结构与算法】获取链表中值算法
  5. windows下 robocopy命令
  6. 关于腾讯云学生服务器搭建个人网站——配置web开发环境详细步骤
  7. vuetify图标不正常显示
  8. 博通BCM94352网卡驱动
  9. Wox插件之程序员不安装会死系列
  10. IMX6Q的DDR3初始化配置
  11. 英语口语语音评测方法
  12. 案例分享 | 数智化升级:红蜻蜓的转型之路(下)
  13. nmap——端口扫描_基础命令
  14. 操作系统中文件系统-文件的分类
  15. 胡适:赠与今年毕业的大学生
  16. 2021年终总结,程序员的日子
  17. Matlab实现PSO算法(附上6个完整仿真源码)
  18. vs发布免安装文件_周日010 英超: 南安普敦vs托特纳姆热刺
  19. CodeHub#4 启动报名| 荷小鱼:K12 在线教育应用的开发实践
  20. 状态同步 和 帧同步

热门文章

  1. 7-2 日期的推算* Java题解
  2. 流感传染 C++ 递推
  3. 软件开发中的哲学思想
  4. VUE : Uncaught (in promise) TypeError: dataOptions.call is not a function
  5. python如何绘制蜘蛛图_python常见的十种可视化图库方法展示
  6. 特征图注意力_注意力机制之Residual Attetion Network
  7. Tensorflow object detection API 搭建属于自己的物体识别模型(转载修改)
  8. 免费NAC最简部署拓扑
  9. 支付宝14岁生日,蚂蚁金服井贤栋表示技术创新要解决实际问题
  10. 机器学习------一元线性回归算法