作者介绍:简历上没有一个精通的运维工程师,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

数据库是一个系统(应用)最重要的资产之一,所以我们的数据库将从以下几个数据库来进行介绍。
MySQL(本章节)
PostgreSQL
Redis
Etcd
视图(View) 是基于 SQL 查询结果集的虚拟表。它包含一系列带有名称的列和行数据,但其内容并不像真实表那样持久存储在数据库中。
SELECT 语句。SELECT 语句),而不存储视图包含的数据。当你查询一个视图时,数据库引擎会动态地从底层基表中取出数据并组装成视图的结果。使用视图可以带来多方面的好处,主要围绕简化操作、安全性和逻辑独立性。
JOIN)、子查询、聚合函数等,你可以将它创建为一个视图。之后,应用程序或用户只需要对这个视图进行简单的 SELECT * FROM my_view 查询即可,无需每次都重写那条复杂的 SQL。视图可以作为一种安全机制,限制用户只能访问表的特定行或列,从而隐藏敏感数据。
employees 表中 id, name, department 列的视图,而不包含 salary, phone_number 等敏感信息。然后授权用户只能访问这个视图,而不是基表。v_my_department_employees 视图,其中 WHERE 子句限定了 department_id = current_user_department。这样用户只能看到自己部门的员工信息。视图可以帮助应用程序和底层表结构解耦。如果因为业务变更,需要将一个大表拆分成多个小表(规范化),或者修改了某些列名。为了不影响现有的应用程序,你可以创建一个与旧表结构一致的视图。应用程序仍然查询这个视图,而视图内部已经调整为新结构的复杂查询。这样就在不修改应用代码的情况下,完成了数据库的平滑演进。
可以为不同的用户或部门提供定制化的数据视角,避免让他们直接面对复杂且庞大的原始表结构。
-- 创建基础视图,只显示部分字段
CREATE VIEW vw_test_data_basic AS
SELECT id, value, created_at
FROM test_data
WHERE random_number > 500;mysql> show tables;
+--------------------+
| Tables_in_test_db |
+--------------------+
| departments |
| myisam_table |
| test_data |
| users |
| vw_test_data_basic |
+--------------------+mysql> SHOW FULL TABLES WHERE TABLE_TYPE = 'VIEW';
+--------------------+------------+
| Tables_in_test_db | Table_type |
+--------------------+------------+
| vw_test_data_basic | VIEW |
+--------------------+------------+
1 row in set (0.00 sec)
-- 完全重写视图定义,类似创建新视图替代旧视图
CREATE OR REPLACE VIEW vw_test_data_basic AS
SELECT
id,
value,
created_at,
random_number,
UPPER(value) AS upper_value, -- 新增字段
random_number * 2 AS doubled_number -- 新增计算字段
FROM test_data
WHERE random_number > 500
AND value IS NOT NULL;-- 修改视图属性(不改变查询定义)类似修改表结构
ALTER VIEW vw_test_data_basic
SQL SECURITY INVOKER
COMMENT 'This view shows basic test data with calculated fields';
-- 查看视图属性变化
SELECT
TABLE_NAME,
VIEW_DEFINITION,
SECURITY_TYPE,
CHECK_OPTION,
IS_UPDATABLE,
DEFINER,
CHARACTER_SET_CLIENT,
COLLATION_CONNECTION
FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'vw_test_data_basic';-- 删除单个视图
DROP VIEW IF EXISTS vw_test_data_basic;
-- 删除多个视图
DROP VIEW IF EXISTS vw_test_data_basic, vw_test_data_enhanced;
-- 安全删除(避免不存在的视图报错)
DROP VIEW IF EXISTS vw_old_data_view;