数据库对象概述

数据库包含多种对象类型,每种都有特定的用途和功能。以下是主要的数据库对象:

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)否是是否定时任务*物化视图除外

这些数据库对象共同构成了完整的数据库应用系统,各自扮演不同的角色,协同工作以实现数据存储、处理和管理的各种需求。