SQL 笔记Part1: DBMS
1. 背景
常用语境下的数据库一般是说的 DBMS,实际数据库是存储的数据集合。而又因为数据存储形式差异,DBMS 有多种类型:
- 层次数据库(Hierarchical Database,HDB)最早研制成功的数据库系统,它把数据通过层次结构(树形结构)的方式表现出来,代表是 IMS(Information Management System)数据库
- 关系数据库(Relational Database,RDB) 关系型数据库也采用由行和列组成的二维表来管理数据,此外使用的语言是 SQL(Structured Query Language)。代表性的关系型数据库有 Oracle Database、SQL Server、DB2、PostgreSQL 和 MySQL
- 非关系型数据库 也就是常说的 NoSQL,实际上是表示的一大类数据库:
- 面向文档(Document-Oriented)数据库 面向文档数据库会将数据以文档的形式存储。每个文档都是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关联对象
数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用XML、JSON或者JSONB等多种形式存储。具有代表性的面向文档数据库有 MongDB 和 CouchDB - 列存储(Column-oriented)数据库 数据存储存在列族(column family)中,列族用来存储经常被一起查询的相关数据。例如,列存储数据库通常用应用于分布式存储的海量数据。具有代表性的列存储数据库有 Cassandra 和 HBase
- XML数据库(XML Database,XMLDB) 是一种支持对 XML(标准通用标记语言下的一个应用)格式文档进行存储和查询等操作的数据管理系统
- 键值存储系统(Key-Value Store,KVS) 用来保存查询所使用的主键(Key)和值(Value)的组合的数据库。具有代表性的键值存储数据库有 Redis、Memcached 和 MemcachedDB
- 面向文档(Document-Oriented)数据库 面向文档数据库会将数据以文档的形式存储。每个文档都是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关联对象
2. 基于关系数据库 SQL 操作
SQL 对于数据的操作包括 DDL、DML 以及 DCL,具体的意义和实用的相关关键字:
DDL(Data Definition Language,数据定义语言) 用来创建或者删除存储数据用的数据库以及数据库中的表等对象。DDL 包含以下几种指令:
CREATE 创建数据库和表
1
2
3
4
5
6
7
8
9
10
11
12
13# 用于创建数据库
CREATE DATABASE <数据库名称>;
# 创建表
CREATE TABLE < 表名 >
( < 列名 1> < 数据类型 > < 该列所需约束 > ,
< 列名 2> < 数据类型 > < 该列所需约束 > ,
< 列名 3> < 数据类型 > < 该列所需约束 > ,
< 列名 4> < 数据类型 > < 该列所需约束 > ,
.
.
.
< 该表的约束 1> , < 该表的约束 2> ,……);其中常用的数据类型包括了 INT、CHAR、VARCHAR、DATE 以及 TEXT,其他类型可能因 DBMS 差异而不同[^1]
DROP : 删除数据库和表等对象,使用
DROP TABLE <表名>;
删除表,使用DROP DATABASE <数据库名>
删除数据库ALTER : 修改数据库和表等对象的结构 使用
ALTER TABLE <表名> [ADD|DROP] COLUMN <列名 >;
DML(Data Manipulation Language,数据操纵语言) 用来查询或者变更表中的记录。DML 包含以下几种指令:
- SELECT :查询表中的数据
- INSERT :向表中插入新数据
- UPDATE :更新表中的数据
- DELETE :删除表中的数据
DCL(Data Control Language,数据控制语言) 用来确认或者取消对数据库中的数据进行的变更。除此之外,还可以对 RDBMS 的用户是否有权限操作数据库中的对象(数据库表等)进行设定。DCL 包含以下几种指令:
- COMMIT : 确认对数据库中的数据进行的变更
- ROLLBACK : 取消对数据库中的数据进行的变更
- GRANT : 赋予用户操作权限
- REVOKE : 取消用户的操作权限
备注
[^1]: MySQL 的数据类型
MySQL 的数据类型有大概可以分为 5 种,分别是整数类型、浮点数类型和定点数类型、日期和时间类型、字符串类型、二进制类型:
数值类型 包括 TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,浮点数类型包括 FLOAT 和 DOUBLE,定点数类型为 DECIMAL。
日期/时间类型 包括 YEAR、TIME、DATE、DATETIME 和 TIMESTAMP
字符串类型 包括 CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM 和 SET
二进制类型 包括 BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB