数据库笔记
数据库结构解析
数据库结构通常分为三层:外模式(用户视图)、概念模式(逻辑设计)和内模式(物理存储)。核心组件包括表、字段、索引、约束(如主键、外键)以及视图。关系型数据库遵循ACID原则(原子性、一致性、隔离性、持久性),而非关系型数据库(如MongoDB)采用文档或键值存储。
-- 示例:查看表结构
DESCRIBE employees;
建库建表
创建数据库需定义字符集和排序规则,建表时需明确字段类型(如VARCHAR, INT)和约束。主键确保唯一性,外键维护表间关系。
-- 创建数据库
CREATE DATABASE company CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;-- 创建表
CREATE TABLE employees (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(100) NOT NULL,dept_id INT,FOREIGN KEY (dept_id) REFERENCES departments(id)
);
查询基础
基础查询包括SELECT、WHERE筛选、GROUP BY分组和ORDER BY排序。聚合函数(如COUNT, SUM)常与GROUP BY配合使用。
-- 条件查询示例
SELECT name, salary
FROM employees
WHERE salary > 5000
ORDER BY hire_date DESC;
JOIN操作
JOIN用于关联多张表,常见类型包括INNER JOIN(交集)、LEFT JOIN(左表全保留)和RIGHT JOIN。需注意关联字段的索引性能。
-- INNER JOIN示例
SELECT e.name, d.dept_name
FROM employees e
INNER JOIN departments d ON e.dept_id = d.id;
进阶知识点
索引优化
创建索引加速查询,但过多索引影响写入性能。复合索引需遵循最左前缀原则。
-- 创建复合索引
CREATE INDEX idx_name_dept ON employees(name, dept_id);
事务控制
使用BEGIN, COMMIT, ROLLBACK管理事务,隔离级别(如READ COMMITTED)影响并发行为。
-- 事务示例
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
窗口函数
适用于分组计算但不合并行的场景,如排名、累积求和。
-- 计算部门薪资排名
SELECT name, salary,RANK() OVER (PARTITION BY dept_id ORDER BY salary DESC) AS rank
FROM employees;
存储过程与触发器
存储过程封装复杂逻辑,触发器自动响应数据变更。
-- 存储过程示例
CREATE PROCEDURE raise_salary(IN emp_id INT, IN amount DECIMAL)
BEGINUPDATE employees SET salary = salary + amount WHERE id = emp_id;
END;