数据库对象概述
数据库对象概述
数据库包含多种对象类型,每种都有特定的用途和功能。以下是主要的数据库对象:
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))
BEGIN
UPDATE 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
BEGIN
DECLARE 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
BEGIN
INSERT 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
BEGIN
INSERT INTO employees_archive
SELECT * 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)否是是否定时任务*物化视图除外
这些数据库对象共同构成了完整的数据库应用系统,各自扮演不同的角色,协同工作以实现数据存储、处理和管理的各种需求。