数据库是应用系统中负责数据存储、管理和检索的核心组件,几乎所有业务系统都离不开数据库的支持。掌握数据库的基础常用知识,是开发者完成业务开发、解决性能问题的基础能力。

基础SQL语法
SQL是操作数据库的标准语言,常用的操作可以分为数据查询、数据操作、数据定义三类。以下是基础的查询和操作示例:
-- 查询用户表中年龄大于18的所有用户信息
SELECT id, name, age FROM user WHERE age > 18;
-- 向用户表中插入一条新数据
INSERT INTO user (name, age, email) VALUES ('张三', 20, 'zhangsan@ipipp.com');
-- 更新用户表中id为1的用户年龄
UPDATE user SET age = 21 WHERE id = 1;
-- 删除用户表中id为2的用户数据
DELETE FROM user WHERE id = 2;
索引的使用
索引是提升数据库查询效率的重要手段,本质是一种排好序的数据结构,能帮助数据库快速定位到目标数据。常见的索引类型包括普通索引、唯一索引、主键索引、组合索引。
创建索引的基本语法如下:
-- 创建普通索引 CREATE INDEX idx_user_age ON user(age); -- 创建唯一索引,保证字段值不重复 CREATE UNIQUE INDEX idx_user_email ON user(email); -- 创建组合索引,遵循最左前缀匹配原则 CREATE INDEX idx_user_name_age ON user(name, age);
需要注意索引不是越多越好,过多的索引会增加数据插入和更新的开销,同时会占用额外的存储空间。一般建议在经常作为查询条件的字段、连接查询的关联字段上创建索引。
事务的ACID特性
事务是数据库操作的基本单位,一组操作要么全部成功,要么全部失败,具备四个核心特性:
- 原子性:事务中的所有操作是一个不可分割的整体,要么全部执行完成,要么全部不执行。
- 一致性:事务执行前后,数据库的状态符合业务规则,比如转账操作后双方总金额不变。
- 隔离性:多个事务并发执行时,一个事务的操作不会被其他事务干扰。
- 持久性:事务提交后,对数据的修改是永久性的,即使数据库发生故障也不会丢失。
事务的基本使用示例如下:
-- 开启事务 START TRANSACTION; -- 执行转账操作,从账户A扣100,给账户B加100 UPDATE account SET balance = balance - 100 WHERE id = 1; UPDATE account SET balance = balance + 100 WHERE id = 2; -- 如果执行没有问题,提交事务 COMMIT; -- 如果出现异常,回滚事务 ROLLBACK;
常见数据库优化方法
当数据库出现查询慢、并发性能差的问题时,可以从以下几个方向进行优化:
- 优化SQL语句,避免使用
SELECT *,尽量只查询需要的字段,减少不必要的数据传输。 - 合理设计索引,避免索引失效的情况,比如对字段使用函数、进行类型转换都会导致索引失效。
- 优化表结构,选择合适的数据类型,比如能用整型就不用字符串类型存储数字,减少存储空间。
- 对于大表可以进行分库分表,将单表数据量控制在合理范围,提升查询和写入效率。
- 合理配置数据库参数,比如调整缓存大小、连接池数量等,适配业务的并发需求。
常用数据库类型对比
目前主流的数据库可以分为关系型数据库和非关系型数据库两类,以下是常见类型的对比:
| 数据库类型 | 代表产品 | 适用场景 |
|---|---|---|
| 关系型数据库 | MySQL, PostgreSQL, Oracle | 需要事务支持、数据结构固定、有复杂关联查询的场景 |
| 非关系型数据库-键值型 | Redis | 缓存场景、高频读写的热点数据存储 |
| 非关系型数据库-文档型 | MongoDB | 数据结构灵活、不需要复杂事务的场景 |
| 非关系型数据库-列存储型 | HBase | 海量数据的存储和查询场景 |
数据备份与恢复
数据备份是防止数据丢失的重要手段,关系型数据库一般支持物理备份和逻辑备份两种方式。以MySQL为例,逻辑备份可以使用mysqldump工具:
-- 备份整个数据库 mysqldump -u root -p test_db > test_db_backup.sql -- 恢复数据库,先创建空数据库,再执行备份文件 mysql -u root -p test_db < test_db_backup.sql
建议根据业务重要性制定备份策略,核心业务数据可以每天全量备份,每小时增量备份,保证数据丢失时能快速恢复到最近的状态。