数据库概念

数据库是一种存储、检索和管理数据的系统。它允许用户以结构化的方式存储数据,并且可以通过各种查询和操作来访问这些数据。

数据库基本特征:
  • 结构化:数据库中的数据通常是以表格(表)的形式存储的,每张表由行(记录)和列(字段)组成。
  • 持久性:数据库中的数据是持久存储的,即使系统关闭,数据也不会丢失。
  • 组织性:数据在数据库中是有序存储的,便于快速检索和更新。
  • 安全性:数据库管理系统提供了多种安全措施,如用户认证、权限控制等,以保护数据不被未授权访问。
  • 并发控制:数据库能够处理多个用户同时访问和修改数据的情况,确保数据的一致性和完整性。
  • 数据完整性:数据库通过各种约束(如主键、外键、唯一性约束等)来维护数据的准确性和可靠性。
  • 灵活性:用户可以通过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

为什么使用数据库

使用数据库的几个最重要的原因包括:

  1. 数据持久性:确保数据在系统关闭后依然安全存储,不会丢失。

  2. 结构化存储:以表格形式组织数据,便于管理和访问。

  3. 数据一致性:通过约束和事务管理,保持数据的准确性和可靠性。

  4. 安全性:提供用户认证和权限控制,保护数据不被未授权访问。

  5. 高效访问:通过索引和查询优化,快速检索大量数据。

  6. 并发控制:允许多个用户同时访问,同时维护数据完整性。

  7. 可扩展性:随着数据量的增长,数据库可以水平或垂直扩展以满足需求。

  8. 支持复杂查询:使用SQL等查询语言,从大量数据中提取有用信息。

  9. 促进决策:通过分析数据,帮助组织做出基于数据的决策。

  10. 成本效益:对于需要处理大量数据的组织,数据库是一种经济高效的解决方案。

SQL

SQL(结构化查询语言)是一种标准化的语言,用于在关系型数据库管理系统(RDBMS)中进行数据管理和操作。SQL的一些关键特性和用途:

  1. 查询:使用SELECT语句从数据库中检索数据。

  2. 插入:使用INSERT INTO语句向数据库表中添加新数据。

  3. 更新:使用UPDATE语句修改数据库中的数据。

  4. 删除:使用DELETE语句从数据库中移除数据。

  5. 数据定义:使用CREATEALTERDROP语句来定义和管理数据库的结构,如创建新表、修改表结构或删除表。

  6. 数据操纵:除了基本的CRUD(创建、读取、更新、删除)操作外,SQL还支持更复杂的数据操纵,如联结(JOIN)、子查询和集合操作。

  7. 事务控制:使用BEGIN TRANSACTIONCOMMITROLLBACK语句来管理事务,确保数据的一致性和完整性。

  8. 权限和安全性:使用GRANTREVOKE语句来分配和撤销用户权限。

  9. 数据完整性:通过设置主键、外键、唯一约束和非空约束等,确保数据的准确性和可靠性。

  10. 数据类型:SQL定义了多种数据类型,如整数、浮点数、字符串、日期和时间等,以适应不同类型的数据存储需求。

  11. 索引:创建索引以优化查询性能,加快数据检索速度。

  12. 视图:使用CREATE VIEW语句创建视图,作为虚拟表,简化复杂的查询或保护数据。

  13. 存储过程和函数:使用存储过程和函数封装复杂的操作,提高代码的重用性和效率。

MYSQL

MySQL是一个广泛使用的开源关系型数据库管理系统(RDBMS),具有以下主要特点:

  1. 开源:免费使用,拥有活跃的开发者社区。
  2. 跨平台:可在多种操作系统上运行,如Linux、Windows和macOS。
  3. 高性能:优化了对大量数据的处理能力。
  4. 可靠性:提供事务支持、备份和恢复功能,确保数据安全。
  5. 可扩展性:支持垂直和水平扩展,适应不同规模的应用需求。
  6. 灵活性:支持多种存储引擎,适应不同的数据存储和访问模式。
  7. 标准SQL:使用标准的SQL语法,便于学习和使用。
  8. 多用户环境:支持多用户并发访问,通过权限控制保障数据安全。
  9. 丰富的数据类型:支持多种数据类型,满足不同存储需求。
  10. 索引优化:支持多种索引类型,提高查询效率。
  11. 复制和分区:支持数据复制和表分区,提高数据的可用性和性能。
  12. 安全性:提供用户认证、权限控制和数据加密功能。
  13. 广泛的应用:适用于从小型应用到大型企业级应用的多种场景。

数据库三大范式

数据库的三大范式是一组设计原则,用于指导关系型数据库的结构设计,以避免数据冗余和维护数据的完整性。以下是三大范式的简述:

  1. 第一范式(1NF)- 原子性

    • 要求数据库表的每一列都是不可分割的最小数据项,即表中的所有字段都应该只包含原子数据,即每个字段的值都是单一的、不可再分的数据项。
  2. 第二范式(2NF)- 完全性

    • 在第一范式的基础上,要求表中的每一列都应完全依赖于主键。也就是说,如果一个表有多个字段可以共同作为主键,那么非主键字段不能只依赖于主键的一部分,而应该完全依赖于整个主键。
  3. 第三范式(3NF)- 非传递依赖

    • 在第二范式的基础上,要求非主键字段不能依赖于其他非主键字段。即,如果存在非主键字段依赖于另一个非主键字段,那么应该将这些字段分离到不同的表中,并通过外键与主表关联。

遵循这三大范式可以帮助数据库设计者创建出结构良好、避免数据冗余和维护数据一致性的数据库模式。然而,实际应用中,为了性能或其他考虑,有时会有意违反某些范式。

数据库链接泄露

数据库连接泄露是指应用程序未能正确关闭数据库连接,导致连接资源无法释放。这可能导致的问题和预防措施包括:

  1. 问题:随着时间推移,连接数耗尽,新操作无法执行,影响性能。

  2. 原因:代码中未关闭连接,异常处理不当,或连接池管理错误。

  3. 预防:确保代码中每个数据库连接都显式关闭,使用异常处理确保即使出错也能关闭连接,合理配置连接池。

  4. 解决:修复代码错误,优化异常处理,监控连接使用情况。

触发器

触发器(Trigger)是一种特殊的存储过程,它在数据库中特定的数据操作(如INSERT、UPDATE或DELETE)之前或之后自动执行。以下是触发器的一些基本要点:

  1. 自动执行:触发器在满足特定条件时自动触发,无需显式调用。
  2. 事件驱动:触发器通常与数据表相关联,并由对表的特定操作(如数据插入、更新或删除)触发。
  3. 时机:触发器可以在数据操作之前(BEFORE)或之后(AFTER)执行。
  4. 用途:用于维护数据完整性、自动更新相关数据、实施复杂的业务规则等。
  5. 类型
    • 行触发器:对表中每一行数据的操作触发。
    • 语句触发器:对整个SQL语句的操作触发。
  6. 语言:触发器通常使用数据库支持的编程语言编写,如PL/SQL(Oracle)或T-SQL(SQL Server)。
  7. 应用场景:适用于需要自动执行维护任务或复杂逻辑的场景,如自动填充字段、记录数据变更历史、同步更新关联表等。