结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
SQL最初是在1970年代初期在IBM开发的。最初,它被称为SEQUEL(结构化英语查询语言),后来被更改为SQL(发音为SQL)。SQL于1987年成为ISO标准。
什么是关系数据库
关系型数据库(Relational Database)是一种基于关系模型的数据库管理系统,其核心思想是将数据组织成二维表(Table),并通过表之间的关联关系来管理数据。它是目前应用最广泛的数据库类型之一,典型的代表包括 MySQL、PostgreSQL、Oracle 和 SQL Server。
核心特点
-
结构化存储
行:代表一条具体记录(如一个用户的详细信息);列:定义数据的属性(如用户ID、姓名、年龄等)。
数据以表(Table)的形式存储,每张表由行(Row)和列(Column)组成:
-- 示例:用户表
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT,
email VARCHAR(100)
);
2. 关系与约束
主键(Primary Key):唯一标识表中的每一行(如 id
)。
外键(Foreign Key):建立表之间的关联(如订单表引用用户表的 id
)。
约束(Constraints):如唯一性、非空、默认值等,确保数据完整性。
3.SQL(结构化查询语言)
通过 SQL(Structured Query Language) 操作数据,支持增删改查(CRUD)和复杂分析:
-- 查询年龄大于30的用户姓名和邮箱地址
SELECT name, email FROM users WHERE age > 30;
4.ACID事务
保证操作的原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),适用于金融、交易等关键场景。
关系型数据库的优缺点
优点 | 缺点 |
---|---|
数据一致性高(ACID支持) | 扩展性有限(横向扩展复杂) |
复杂查询能力强(JOIN、子查询) | 处理海量数据时性能可能下降 |
支持事务和回滚 | 预定义的表结构不够灵活 |
成熟度高,工具生态完善 | 非结构化数据(如JSON)支持较弱 |
常见关系型数据库
数据库 | 特点 |
---|---|
MySQL | 开源、轻量级,适合Web应用 |
PostgreSQL | 支持JSON、GIS等高级特性,扩展性强 |
Oracle | 企业级功能完善,成本高 |
SQL Server | 深度集成微软生态,商业场景常用 |
什么是非关系数据库
非关系型数据库(NoSQL,Not Only SQL)是一种非结构化、分布式的数据库系统,专为应对大规模数据和高并发场景设计。与传统关系型数据库(RDBMS)不同,NoSQL 不强制使用固定的表结构,而是通过灵活的数据模型(如键值对、文档、图等)存储数据,适合处理海量、动态或半结构化数据。典型代表包括 MongoDB(文档型)、Redis(键值型)、Cassandra(列族型)和 Neo4j(图数据库)。
核心特点
-
灵活的数据模型
-
支持多种数据格式:无需预定义表结构,可动态扩展字段。
-
示例:MongoDB 的文档型存储(JSON格式):
{ "_id": "user123", "name": "Alice", "age": 28, "tags": ["tech", "music"], "address": { "city": "Beijing", "zip": "100001" } }
-
-
分布式架构
天然支持水平扩展(通过分片和副本集),适合处理PB级数据和高并发请求。 -
最终一致性(BASE理论)
弱化一致性要求,遵循 BASE(Basically Available, Soft state, Eventual consistency),以提升可用性和性能。 -
高性能
针对特定场景优化(如内存数据库 Redis 可达每秒百万级读写)。
常见非关系型数据库与适用场景
类型 | 数据模型 | 典型产品 | 适用场景 |
---|---|---|---|
键值型 | Key-Value 键值对 | Redis, DynamoDB | 缓存、会话管理、计数器(如购物车) |
文档型 | JSON/BSON 文档 | MongoDB, CouchDB | 内容管理、用户配置(如用户画像) |
列族型 | 列族(按列存储) | Cassandra, HBase | 时序数据、日志存储(如物联网设备数据) |
图数据库 | 节点与关系组成的图 | Neo4j, ArangoDB | 社交网络、推荐系统(如好友关系分析) |
非关系数据库的优缺点
优点 | 缺点 |
---|---|
高扩展性(分布式架构) | 不支持复杂事务(如多文档事务) |
灵活适应数据结构变化 | 查询能力有限(尤其跨文档/跨表查询) |
高性能(读写优化) | 数据一致性较弱(最终一致性) |
适合海量数据存储 | 学习成本高(不同NoSQL类型差异大) |
关系型 vs 非关系型数据库
维度 | 关系型数据库 | 非关系型数据库(NoSQL) |
---|---|---|
数据结构 | 严格的表结构 | 灵活(文档、键值、列族、图等) |
扩展性 | 垂直扩展(提升单机性能) | 水平扩展(分布式集群) |
一致性 | 强一致性 | 最终一致性(BASE理论) |
典型场景 | 事务处理、复杂查询 | 高并发读写、大数据存储 |
代表产品 | MySQL, PostgreSQL | MongoDB(文档型), Redis(键值型) |