数据库相关知识
字数 1921 2025-08-12 12:08:15
数据库基础知识全面教程
一、数据库基本概念
1.1 数据库(DB)
数据库(DataBase)是存储数据的仓库,数据是有组织地进行存储的集合。它能够有效地管理大量数据,并提供高效的检索机制。
1.2 数据库管理系统(DBMS)
数据库管理系统(DataBase Management System)是管理数据库的大型软件,提供创建、使用和维护数据库的功能。
1.3 SQL语言
SQL(Structured Query Language)是结构化查询语言,用于操作关系型数据库的编程语言。它定义了操作所有关系型数据库的统一标准。
特点:
- 每种数据库可能有自己的"方言"(特定实现细节)
- 不区分大小写(但关键字通常建议大写)
- 可以单行或多行书写,以分号结尾
二、常见关系型数据库
- Oracle:收费的大型数据库,Oracle公司产品
- MySQL:开源免费的中小型数据库(现属于Oracle)
- SQL Server:Microsoft中型收费数据库,常用于C#/.NET
- PostgreSQL:开源免费中小型数据库
- DB2:IBM大型收费数据库
- SQLite:嵌入式微型数据库(如Android内置)
- MariaDB:开源免费中小型数据库(MySQL分支)
三、关系型数据库模型
关系型数据库建立在关系模型基础上,由多张能互相连接的二维表组成。
优点:
- 表结构一致,易于维护
- 使用通用SQL语言,方便复杂查询
- 数据存储在磁盘中,安全性高
四、SQL分类
4.1 DDL(数据定义语言)
定义数据库对象:数据库、表、列等
4.2 DML(数据操作语言)
对表中数据进行增删改操作
4.3 DQL(数据查询语言)
查询表中记录
4.4 DCL(数据控制语言)
定义访问权限和安全级别,创建用户
五、DDL操作详解
5.1 数据库操作
-- 查询所有数据库
SHOW DATABASES;
-- 创建数据库
CREATE DATABASE 数据库名称;
CREATE DATABASE IF NOT EXISTS 数据库名称; -- 不存在则创建
-- 删除数据库
DROP DATABASE 数据库名称;
DROP DATABASE IF EXISTS 数据库名称; -- 存在则删除
-- 使用数据库
SELECT DATABASE(); -- 查询当前使用的数据库
USE 数据库名称; -- 使用指定数据库
5.2 表操作
-- 查询表
SHOW TABLES; -- 查询当前数据库所有表
DESC 表名称; -- 查询表结构
-- 创建表
CREATE TABLE 表名(
字段名1 数据类型1,
字段名2 数据类型2,
...
字段名n 数据类型n
); -- 注意最后一行不加逗号
-- 删除表
DROP TABLE 表名;
DROP TABLE IF EXISTS 表名; -- 存在则删除
-- 修改表
ALTER TABLE 表名 RENAME TO 新表名; -- 修改表名
ALTER TABLE 表名 ADD 列名 数据类型; -- 添加列
ALTER TABLE 表名 MODIFY 列名 新数据类型; -- 修改数据类型
ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型; -- 修改列名和类型
ALTER TABLE 表名 DROP 列名; -- 删除列
5.3 数据类型
-
数值类型:
- INT:整数
- DOUBLE(总长度,小数位数):浮点数
-
字符串类型:
- CHAR(0-255):定长字符串,性能高但浪费空间
- VARCHAR(0-65535):变长字符串,性能低但节约空间
-
日期类型:
- DATE:日期
- TIME:时间
- DATETIME:日期时间
- TIMESTAMP:时间戳
六、DML操作详解
6.1 添加数据
-- 给指定列添加数据
INSERT INTO 表名(列名1,列名2,...) VALUES(值1,值2,...);
-- 给全部列添加数据(不推荐)
INSERT INTO 表名 VALUES(值1,值2,...);
-- 批量添加
INSERT INTO 表名(列名1,列名2,...)
VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);
INSERT INTO 表名 VALUES
(值1,值2,...),(值1,值2,...),(值1,值2,...);
6.2 修改数据
UPDATE 表名 SET 列名1=值1,列名2=值2,... [WHERE 条件];
-- 注意:不加WHERE条件会修改所有数据!
6.3 删除数据
DELETE FROM 表名 [WHERE 条件];
-- 注意:不加WHERE条件会删除所有数据!
七、DQL查询详解
7.1 基础查询
-- 查询多个字段
SELECT 字段列表 FROM 表名;
-- 查询所有数据
SELECT * FROM 表名;
-- 去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
-- 别名设置
SELECT 原始字段名 AS 别名 FROM 表名; -- AS可省略
7.2 条件查询
SELECT 字段列表 FROM 表名 WHERE 条件列表;
条件运算符:
| 运算符 | 说明 |
|---|---|
| > | 大于 |
| < | 小于 |
| >= | 大于等于 |
| <= | 小于等于 |
| = | 等于 |
| <>或!= | 不等于 |
| BETWEEN...AND... | 在范围内(包含) |
| IN(...) | 多选一 |
| LIKE | 模糊查询 |
| IS NULL | 是NULL |
| IS NOT NULL | 不是NULL |
| AND或&& | 并且 |
| OR或|| | 或者 |
| NOT或! | 非 |
LIKE模糊查询:
_:匹配单个任意字符%:匹配多个任意字符
7.3 排序查询
SELECT 字段列表 FROM 表名
ORDER BY 排序字段名1 [ASC|DESC], 排序字段2 [ASC|DESC], ...;
说明:
- ASC:升序(默认)
- DESC:降序
- 多字段排序时,前字段值相同时才按后字段排序
7.4 聚合函数
将一列数据作为整体进行纵向计算。
常用函数:
- COUNT(列名):统计数量(推荐用非NULL列)
- MAX(列名):最大值
- MIN(列名):最小值
- SUM(列名):求和
- AVG(列名):平均值
语法:
SELECT 聚合函数名(列名) FROM 表;
注意:NULL值不参与聚合函数计算
7.5 分组查询
SELECT 字段列表 FROM 表名
[WHERE 分组前条件]
GROUP BY 分组字段名
[HAVING 分组后条件];
注意事项:
- 分组后通常查询聚合函数和分组字段
- WHERE和HAVING区别:
- WHERE在分组前过滤,不满足条件不参与分组
- HAVING在分组后过滤
- WHERE不能使用聚合函数,HAVING可以
- 执行顺序:WHERE > 聚合函数 > HAVING
7.6 分页查询
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询条目数;
说明:
- 起始索引从0开始
- LIMIT是MySQL方言,其他数据库不同:
- Oracle:ROWNUMBER
- SQL Server:TOP
八、SQL注释
-- 单行注释(标准SQL)
# 单行注释(MySQL特有)
/*
多行注释
*/
九、最佳实践建议
- 创建表时最后一行不要加逗号
- 修改和删除数据时务必添加WHERE条件
- 分组查询后只查询聚合函数和分组字段
- 使用COUNT()时选择非NULL列
- 表名和字段名使用反引号``包裹可避免关键字冲突
- 批量操作数据时使用事务保证数据一致性
通过掌握以上知识,您已经具备了关系型数据库的基础操作能力,可以开始进行实际的数据库开发工作。