二、数据库基础概念

数据库基础概念

什么是数据库?

数据库是结构化信息的集合,支持高效的数据存储、检索和管理。常见的类型包括:

  • 关系型数据库(如MySQL、PostgreSQL)
  • 非关系型数据库(如MongoDB、Redis)
关系型 vs 非关系型
特性关系型数据库非关系型数据库
数据结构表(行和列)灵活(文档、键值等)
扩展方式垂直扩展水平扩展
适用场景复杂查询、事务支持大数据、灵活模式

SQL基础

创建表
/*
 * 创建用户信息表
 * 功能:存储系统用户的核心信息
 * 设计规范:
 *   - 主键使用自增ID确保唯一性
 *   - 关键字段添加约束保证数据完整性
 */
CREATE TABLE users (
    -- 用户唯一标识(主键)
    -- 类型:INT(4字节整型)
    -- 约束:PRIMARY KEY(主键索引),AUTO_INCREMENT(自动+1)
    id INT PRIMARY KEY AUTO_INCREMENT,
    
    -- 用户姓名(必填字段)
    -- 类型:VARCHAR(50)(最大50个字符的变长字符串)
    -- 约束:NOT NULL(禁止空值)
    name VARCHAR(50) NOT NULL,
    
    -- 用户邮箱(唯一标识)
    -- 类型:VARCHAR(100)(最大100个字符)
    -- 约束:UNIQUE(唯一索引,禁止重复)
    email VARCHAR(100) UNIQUE,
    
    -- 记录创建时间(自动填充)
    -- 类型:TIMESTAMP(精确到秒的时间戳)
    -- 默认值:CURRENT_TIMESTAMP(系统当前时间)
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
插入数据
INSERT INTO users (name, email) 
VALUES ('Alice', 'alice@example.com');
查询数据
SELECT name, email FROM users WHERE id = 1;

数据库设计

规范化(Normalization)
  • 目标:减少数据冗余,避免更新异常。
  • 常用范式
    1. 1NF:列不可再分。
    2. 2NF:消除部分依赖。
    3. 3NF:消除传递依赖。
索引的作用
  • 加速查询,但会增加写操作的开销。
  • 示例:CREATE INDEX idx_name ON users (name);

性能优化

慢查询优化步骤
  1. 使用EXPLAIN分析执行计划。
  2. 确保查询使用了索引。
  3. 避免SELECT *,只取需要的字段。
  4. 优化JOIN操作,减少临时表大小。
示例:EXPLAIN输出解读
EXPLAIN SELECT * FROM users WHERE name = 'Alice';
  • 关键列:type(扫描类型)、rows(预估扫描行数)、key(使用的索引)。

事务管理

ACID属性
  • Atomicity(原子性):事务全部成功或全部失败。
  • Consistency(一致性):事务前后数据库状态合法。
  • Isolation(隔离性):并发事务互不干扰。
  • Durability(持久性):事务提交后数据永久保存。
隔离级别
级别脏读不可重复读幻读
READ UNCOMMITTED✔️✔️✔️
READ COMMITTED✖️✔️✔️
REPEATABLE READ✖️✖️✔️
SERIALIZABLE✖️✖️✖️

常见问题与解决方案

错误:Deadlock found
  • 原因:多个事务互相等待资源。
  • 解决
    1. 重试事务。
    2. 调整事务顺序,缩短持有锁的时间。
SQL注入防护
  • 永远不要拼接SQL字符串!

  • 使用参数化查询:

    # Python示例
    cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值