数据库基础概念
数据库概念
数据库是一种存储、检索和管理数据的系统。它允许用户以结构化的方式存储数据,并且可以通过各种查询和操作来访问这些数据。
数据库基本特征:
- 结构化:数据库中的数据通常是以表格(表)的形式存储的,每张表由行(记录)和列(字段)组成。
- 持久性:数据库中的数据是持久存储的,即使系统关闭,数据也不会丢失。
- 组织性:数据在数据库中是有序存储的,便于快速检索和更新。
- 安全性:数据库管理系统提供了多种安全措施,如用户认证、权限控制等,以保护数据不被未授权访问。
- 并发控制:数据库能够处理多个用户同时访问和修改数据的情况,确保数据的一致性和完整性。
- 数据完整性:数据库通过各种约束(如主键、外键、唯一性约束等)来维护数据的准确性和可靠性。
- 灵活性:用户可以通过SQL(结构化查询语言)等查询语言来执行复杂的数据操作。
- 可扩展性:数据库系统通常可以随着数据量的增加而扩展,以适应不断增长的存储和处理需求。
两种数据库
-
关系型数据库:使用表格模型来组织数据,数据之间通过关系(如外键)相互关联。常见的关系型数据库有MySQL、PostgreSQL、Oracle和SQL Server等。
-
非关系型数据库(NoSQL):不使用传统的表格模型,而是使用其他数据模型,如键值对、文档、宽列存储或图形数据库。常见的非关系型数据库有MongoDB、Cassandra、Redis和Neo4j等。
下面是一个表格,概述了关系型数据库(RDBMS)和非关系型数据库(NoSQL)之间的一些关键差异:
| 特性/方面 | 关系型数据库 (RDBMS) | 非关系型数据库 (NoSQL) |
|---|---|---|
| 数据模型 | 表格模型 | 键值对、文档、宽列、图形等 |
| 查询语言 | SQL | 多样,可能不是统一的 |
| 扩展性 | 垂直扩展为主 | 水平扩展 |
| 一致性模型 | ACID (强一致性) | BASE (最终一致性) |
| 事务支持 | 支持复杂事务 | 事务支持有限 |
| 数据关系 | 支持复杂关系 | 不存储或以不同方式存储关系 |
| 适用场景 | 需要复杂查询和事务处理 | 需要高扩展性和灵活数据模型 |
| 数据结构 | 固定,需预先定义 | 灵活,可存储不同结构数据 |
| 性能 | 高性能读写,但可能受限于扩展性 | 高性能读写,易于扩展 |
| 例子 | MySQL, PostgreSQL, Oracle, SQL Server | MongoDB, Cassandra, Redis, Neo4j |
为什么使用数据库
使用数据库的几个最重要的原因包括:
-
数据持久性:确保数据在系统关闭后依然安全存储,不会丢失。
-
结构化存储:以表格形式组织数据,便于管理和访问。
-
数据一致性:通过约束和事务管理,保持数据的准确性和可靠性。
-
安全性:提供用户认证和权限控制,保护数据不被未授权访问。
-
高效访问:通过索引和查询优化,快速检索大量数据。
-
并发控制:允许多个用户同时访问,同时维护数据完整性。
-
可扩展性:随着数据量的增长,数据库可以水平或垂直扩展以满足需求。
-
支持复杂查询:使用SQL等查询语言,从大量数据中提取有用信息。
-
促进决策:通过分析数据,帮助组织做出基于数据的决策。
-
成本效益:对于需要处理大量数据的组织,数据库是一种经济高效的解决方案。
SQL
SQL(结构化查询语言)是一种标准化的语言,用于在关系型数据库管理系统(RDBMS)中进行数据管理和操作。SQL的一些关键特性和用途:
-
查询:使用
SELECT语句从数据库中检索数据。 -
插入:使用
INSERT INTO语句向数据库表中添加新数据。 -
更新:使用
UPDATE语句修改数据库中的数据。 -
删除:使用
DELETE语句从数据库中移除数据。 -
数据定义:使用
CREATE、ALTER和DROP语句来定义和管理数据库的结构,如创建新表、修改表结构或删除表。 -
数据操纵:除了基本的CRUD(创建、读取、更新、删除)操作外,SQL还支持更复杂的数据操纵,如联结(JOIN)、子查询和集合操作。
-
事务控制:使用
BEGIN TRANSACTION、COMMIT和ROLLBACK语句来管理事务,确保数据的一致性和完整性。 -
权限和安全性:使用
GRANT和REVOKE语句来分配和撤销用户权限。 -
数据完整性:通过设置主键、外键、唯一约束和非空约束等,确保数据的准确性和可靠性。
-
数据类型:SQL定义了多种数据类型,如整数、浮点数、字符串、日期和时间等,以适应不同类型的数据存储需求。
-
索引:创建索引以优化查询性能,加快数据检索速度。
-
视图:使用
CREATE VIEW语句创建视图,作为虚拟表,简化复杂的查询或保护数据。 -
存储过程和函数:使用存储过程和函数封装复杂的操作,提高代码的重用性和效率。
MYSQL
MySQL是一个广泛使用的开源关系型数据库管理系统(RDBMS),具有以下主要特点:
- 开源:免费使用,拥有活跃的开发者社区。
- 跨平台:可在多种操作系统上运行,如Linux、Windows和macOS。
- 高性能:优化了对大量数据的处理能力。
- 可靠性:提供事务支持、备份和恢复功能,确保数据安全。
- 可扩展性:支持垂直和水平扩展,适应不同规模的应用需求。
- 灵活性:支持多种存储引擎,适应不同的数据存储和访问模式。
- 标准SQL:使用标准的SQL语法,便于学习和使用。
- 多用户环境:支持多用户并发访问,通过权限控制保障数据安全。
- 丰富的数据类型:支持多种数据类型,满足不同存储需求。
- 索引优化:支持多种索引类型,提高查询效率。
- 复制和分区:支持数据复制和表分区,提高数据的可用性和性能。
- 安全性:提供用户认证、权限控制和数据加密功能。
- 广泛的应用:适用于从小型应用到大型企业级应用的多种场景。
数据库三大范式
数据库的三大范式是一组设计原则,用于指导关系型数据库的结构设计,以避免数据冗余和维护数据的完整性。以下是三大范式的简述:
-
第一范式(1NF)- 原子性:
- 要求数据库表的每一列都是不可分割的最小数据项,即表中的所有字段都应该只包含原子数据,即每个字段的值都是单一的、不可再分的数据项。
-
第二范式(2NF)- 完全性:
- 在第一范式的基础上,要求表中的每一列都应完全依赖于主键。也就是说,如果一个表有多个字段可以共同作为主键,那么非主键字段不能只依赖于主键的一部分,而应该完全依赖于整个主键。
-
第三范式(3NF)- 非传递依赖:
- 在第二范式的基础上,要求非主键字段不能依赖于其他非主键字段。即,如果存在非主键字段依赖于另一个非主键字段,那么应该将这些字段分离到不同的表中,并通过外键与主表关联。
遵循这三大范式可以帮助数据库设计者创建出结构良好、避免数据冗余和维护数据一致性的数据库模式。然而,实际应用中,为了性能或其他考虑,有时会有意违反某些范式。
数据库链接泄露
数据库连接泄露是指应用程序未能正确关闭数据库连接,导致连接资源无法释放。这可能导致的问题和预防措施包括:
-
问题:随着时间推移,连接数耗尽,新操作无法执行,影响性能。
-
原因:代码中未关闭连接,异常处理不当,或连接池管理错误。
-
预防:确保代码中每个数据库连接都显式关闭,使用异常处理确保即使出错也能关闭连接,合理配置连接池。
-
解决:修复代码错误,优化异常处理,监控连接使用情况。
触发器
触发器(Trigger)是一种特殊的存储过程,它在数据库中特定的数据操作(如INSERT、UPDATE或DELETE)之前或之后自动执行。以下是触发器的一些基本要点:
- 自动执行:触发器在满足特定条件时自动触发,无需显式调用。
- 事件驱动:触发器通常与数据表相关联,并由对表的特定操作(如数据插入、更新或删除)触发。
- 时机:触发器可以在数据操作之前(BEFORE)或之后(AFTER)执行。
- 用途:用于维护数据完整性、自动更新相关数据、实施复杂的业务规则等。
- 类型:
- 行触发器:对表中每一行数据的操作触发。
- 语句触发器:对整个SQL语句的操作触发。
- 语言:触发器通常使用数据库支持的编程语言编写,如PL/SQL(Oracle)或T-SQL(SQL Server)。
- 应用场景:适用于需要自动执行维护任务或复杂逻辑的场景,如自动填充字段、记录数据变更历史、同步更新关联表等。


