SQL 语言(上篇):数据库基础与管理
1. 关系型数据库的构成
关系型数据库由多个核心组件构成,每个组件承担不同的功能,共同支撑数据库的运行与管理。下表概括了这些组件及其关键特性:
| 组件 | 关键字 | 说明 |
|---|---|---|
| 数据库 | database | 表的集合,一个数据库中可以有多个表,在文件系统中表出就是一个目录 |
| 表 | table | 在数据库中以二维表的形式出现,有行和列,数据库中的数据就是存放于表中的 |
| 索引 | index | 索引通常建立在一个列上,用以加快数据查询速度 |
| 视图 | view | 用SQL语言构建的虚拟表,可以临时把两个或多个表以逻辑关系关联上,对外提供查询 |
| 存储过程 | procedure | 存储过程是一组为了完成特定功能的SQL语句集合,客户端可以直接调用 |
| 存储函数 | function | 存储函数和存储过程一样,都是SQL语句集合,但可以使用参数 |
| 触发器 | tigger | 触发器也是有SQL语句的集合组成,但需要达到触发条件才能调用 |
| 事件调度器 | event scheduler | 数据库中的计划任务 |
| 用户 | user | 连接服务端时的用户名 |
| 权限 | privilege | 每个用户可以对哪些数据库或表进行操作,在什么IP能连接 |
2. SQL 语言介绍
SQL(Structured Query Language) 即结构化查询语言,是关系型数据库的标准操作语言。其发展历程如下:
- 1970年代初,埃德加·科德提出关系模型。
- 1974年,D.D.Chamberlin 和 R.F.Boyce 在研制 System R 时开发出 SEQUEL 语言。
- 1976年更名为 SQL,并逐步成为关系数据库的标准语言。
- 1986年,ANSI 采纳 SQL 作为关系数据库管理系统的标准语言。
- 1987年成为 ISO 国际标准。
- 后续历经多个版本的更新,如 SQL-1992、SQL-1999、SQL-2008、SQL-2011 等。
- 目前所有主流关系数据库都支持 SQL 标准,但各厂商的扩展实现(如 T-SQL、PL/SQL)存在差异。
2.1 SQL 语言规范
SQL 语句在书写和执行时遵循一定的规范:
- 不区分大小写,但建议关键字使用大写。
- 语句可以单行或多行书写,以
;结尾。 - 关键词不能跨行或简写。
- 使用空格和缩进提高可读性。
- 子句通常独立成行。
示例:
bash
mysql> select @@hostname;
+-----------------------+
| @@hostname |
+-----------------------+
| localhost.localdomain |
+-----------------------+
1 row in set (0.00 sec)
mysql> SELect @@HOSTname;
+-----------------------+
| @@HOSTname |
+-----------------------+
| localhost.localdomain |
+-----------------------+
1 row in set (0.00 sec)
2.2 SQL 注释
SQL 支持两种标准注释方式:
mysql
-- 单行注释
/*
多行注释
select version()\G
*/
select version()\G
MySQL 还支持 # 作为单行注释:
bash
# select version()\G;
select version()\G;
3. 数据库对象与命名
数据库中的对象包括:
数据库、表、索引、视图、用户、存储过程、函数、触发器、事件调度器等
命名规则:
- 可包含字母、数字及
#_$三种特殊字符。 - 不能使用 MySQL 保留字。
4. SQL 语句分类
SQL 语句按功能可分为以下几类:
| 类型 | 全称 | 说明 | 常用语句 |
|---|---|---|---|
| DDL | Data Definition Language | 数据定义语言 | CREATE, DROP, ALTER |
| DML | Data Manipulation Language | 数据操纵语言 | INSERT, DELETE, UPDATE |
| DQL | Data Query Language | 数据查询语言 | SELECT |
| DCL | Data Control Language | 数据控制语言 | GRANT, REVOKE |
| TCL | Transaction Control Language | 事务控制语言 | BEGIN, COMMIT, ROLLBACK, SAVEPOINT |
5. SQL 语句构成
SQL 语句由关键字组成的子句构成,例如:
mysql
SELECT host,user,authentication_string -- SELECT 子句
FROM mysql.user -- FROM 子句
WHERE authentication_string = ''; -- WHERE 子句
6. 字符集与排序规则
6.1 字符集
MySQL 8.0 默认使用 utf8mb4 字符集,支持更完整的 Unicode 字符。查看支持的字符集:
mysql
SHOW CHARACTER SET;
6.2 排序规则
排序规则决定字符串的比较和排序方式,例如是否区分大小写。查看当前排序规则:
mysql
SHOW VARIABLES LIKE 'collation%';
常用规则:
utf8mb4_0900_ai_ci:不区分大小写,默认规则。utf8_bin:区分大小写。
7. 管理数据库
7.1 查看数据库
mysql
SHOW DATABASES;
7.2 创建数据库
创建时可指定字符集和排序规则:
mysql
CREATE DATABASE testdb1;
CREATE DATABASE testdb2 DEFAULT CHARACTER SET latin1;
7.3 修改数据库
例如修改字符集:
mysql
ALTER DATABASE testdb2 CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
7.4 删除数据库
mysql
DROP DATABASE testdb2;
8. 数据类型
MySQL 支持多种数据类型,合理选择类型有助于优化存储与查询性能。
8.1 数值类型
| 类型 | 大小 | 有符号范围 | 无符号范围 | 用途 |
|---|---|---|---|---|
| TINYINT | 1 Byte | (-128, 127) | (0, 255) | 小整数值 |
| INT | 4 Bytes | (-2^31, 2^31-1) | (0, 2^32-1) | 大整数值 |
| FLOAT | 4 Bytes | 单精度浮点数 | 浮点数值 | |
| DECIMAL | 变长 | 精确小数,依赖 M、D | 高精度小数 |
8.2 日期时间类型
| 类型 | 格式 | 范围 |
|---|---|---|
| DATE | YYYY-MM-DD | 1000-01-01 到 9999-12-31 |
| DATETIME | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 到 9999-12-31 23:59:59 |
| TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1970-01-01 到 2038-01-19 |
8.3 字符串类型
| 类型 | 最大长度 | 说明 |
|---|---|---|
| CHAR | 255 字符 | 定长字符串 |
| VARCHAR | 65535 字符 | 变长字符串 |
| TEXT | 65535 字符 | 长文本数据 |
| BLOB | 65535 字节 | 二进制大对象 |
9. 小结
本文介绍了 SQL 语言的基础组成部分,包括数据库的构成、SQL 规范、数据类型及基本数据库管理操作。掌握这些内容是进行高效数据库设计与查询的基础。后续内容将继续深入 SQL 的数据操作、查询优化与高级功能。