数据库对象概述
数据库对象概述
数据库包含多种对象类型,每种都有特定的用途和功能。以下是主要的数据库对象:
1. 表(Tables)
概念:存储实际数据的基本结构,由行和列组成。
特点:
- 数据实际存储的位置
- 包含列定义(字段名、数据类型、约束等)
- 可以有索引提高查询性能
- 支持增删改查(CRUD)操作
示例:
CREATE TABLE employees (emp_id INT PRIMARY KEY,emp_name VARCHAR(100) NOT NULL,hire_date DATE,salary DECIMAL(10,2)
);
2. 视图(Views)
概念:基于一个或多个表的虚拟表,是存储的查询。
特点:
- 不实际存储数据(物化视图除外)
- 可以简化复杂查询
- 提供数据安全性(隐藏敏感列)
- 可以像表一样查询
示例:
CREATE VIEW emp_dept_view AS
SELECT e.emp_id, e.emp_name, d.dept_name
FROM employees e
JOIN departments d ON e.dept_id = d.dept_id;
3. 存储过程(Stored Procedures)
概念:预编译的SQL语句集合,可接受参数并执行复杂操作。
特点:
- 提高性能(预编译)
- 减少网络流量
- 增强安全性
- 支持流程控制(IF、LOOP等)
示例:
CREATE PROCEDURE increase_salary(IN emp_id INT, IN percent DECIMAL(5,2))
BEGINUPDATE employees SET salary = salary * (1 + percent/100)WHERE emp_id = emp_id;
END;
4. 函数(Functions)
概念:可重用的SQL代码块,接受参数并返回单个值。
特点:
- 必须返回一个值
- 可以在SQL语句中调用
- 可以是标量函数或表值函数
- 与存储过程不同,主要用于计算
示例:
CREATE FUNCTION calculate_bonus(salary DECIMAL(10,2), years INT)
RETURNS DECIMAL(10,2)
DETERMINISTIC
BEGINDECLARE bonus DECIMAL(10,2);SET bonus = salary * 0.1 * years;RETURN bonus;
END;
5. 触发器(Triggers)
概念:在特定数据库事件(INSERT/UPDATE/DELETE)发生时自动执行的代码。
特点:
- 自动触发,无法直接调用
- 可以设置在操作前(BEFORE)或操作后(AFTER)执行
- 常用于数据验证、审计跟踪、维护派生数据
示例:
CREATE TRIGGER audit_employee_change
AFTER UPDATE ON employees
FOR EACH ROW
BEGININSERT INTO employee_audit(emp_id, changed_field, old_value, new_value, change_date)VALUES (OLD.emp_id, 'salary', OLD.salary, NEW.salary, NOW());
END;
6. 事件(Events)
概念:根据时间表自动执行的数据库操作(类似于操作系统中的定时任务)。
特点:
- 在特定时间或间隔执行
- 需要事件调度器启用
- 用于定期维护、数据归档等
示例:
CREATE EVENT archive_old_records
ON SCHEDULE EVERY 1 MONTH
DO
BEGININSERT INTO employees_archiveSELECT * FROM employees WHERE hire_date < DATE_SUB(CURDATE(), INTERVAL 5 YEAR);DELETE FROM employees WHERE hire_date < DATE_SUB(CURDATE(), INTERVAL 5 YEAR);
END;
各对象比较
对象类型 | 存储数据 | 可执行代码 | 自动触发 | 返回值 | 主要用途 |
---|---|---|---|---|---|
表(Tables) | 是 | 否 | 否 | 否 | 数据存储 |
视图(Views) | 否* | 否 | 否 | 结果集 | 简化查询/安全 |
存储过程(Procs) | 否 | 是 | 否 | 可选 | 复杂业务逻辑 |
函数(Functions) | 否 | 是 | 否 | 必须 | 计算/转换 |
触发器(Triggers) | 否 | 是 | 是 | 否 | 自动响应数据变更 |
事件(Events) | 否 | 是 | 是 | 否 | 定时任务 |
*物化视图除外
这些数据库对象共同构成了完整的数据库应用系统,各自扮演不同的角色,协同工作以实现数据存储、处理和管理的各种需求。