MySQL的视图

本文详细介绍了视图的概念,包括其作为虚拟表的作用,如何简化查询、保障安全,以及使用CREATE OR REPLACE VIEW语句创建、ALTER VIEW修改和区分可更新视图的方法。通过实例演示了视图的创建、修改和更新操作,以及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念:

  • 视图(view)是一个虚拟表,并非真实存在,其本质是跟去SQL语句获取动态的数据集,并为其明明,用户使用时秩序使用视图名称即可获取结果集,并可以将其当做表来使用。
  • 数据库只存放了视图的定义,而并没有存放视图中的数据。这些数据存放在原来的表中。
  • 使用视图查询数据时,数据库系统会从原来的表中去除对应的数据。因此,视图中的数据时依赖于原来的表中的数据的。一旦表中的数据发生改变,显示在视图中的数据也会发生改变。

作用:

  • 简化代码,可以吧重复使用的查询封装成视图重复使用,同时可以使复杂的查询易于理解和使用。
  • 安全原因,如果一张表中有很多数据,很多信息不希望让所有人看到,此时可以使用视图,如:社会保险基金表,可以用视图只显示姓名,地址,而不显示社会保险号和工资数等,可以对不同的用户没设定不同的视图。

方法:
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE} ]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED |LOCAL] CHECK OPTION]

注:
(1)algorithm:可选项,表示视图选择的算法。
(2)view_name:表示要创建的视图名称。
(3)column_list:可选项,指定视图中各个属性的名称,默认情况下与SELECT语句中的查询的属性相同。
(4)selcet_statement:表示一个完整的查询语句,将查询记录导入视图中。
(5)[with [cascaded |local ] check option]:可选项,表示更新视图时要保证在该视图的权限范围之内。

例如:
先创建表和数据

CREATE TABLE dept  (
  deptno int NOT NULL,
  dname varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  loc varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`deptno`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

INSERT INTO dept VALUES (10, '教研部', '北京');
INSERT INTO dept VALUES (20, '学工部', '上海');
INSERT INTO dept VALUES (30, '销售部', '广州');
INSERT INTO dept VALUES (40, '财务部', '武汉');

CREATE TABLE emp  (
  empno int NOT NULL,
  ename varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  job varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  mgr int NULL DEFAULT NULL,
  hiredate date NULL DEFAULT NULL,
  sal decimal(7, 2) NULL DEFAULT NULL,
  COMM decimal(7, 2) NULL DEFAULT NULL,
  deptno int NULL DEFAULT NULL,
  PRIMARY KEY (empno) USING BTREE,
  INDEX fk_emp(mgr) USING BTREE,
  CONSTRAINT fk_emp FOREIGN KEY (mgr) REFERENCES emp (empn
### 创建、查询和管理 MySQL 视图的方法 #### 一、创建视图MySQL 中,可以通过 `CREATE VIEW` 语句来创建视图。以下是具体的语法: ```sql CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]; ``` - **`view_name`**: 表示要创建的视图名称。 - **`select_statement`**: 是一条标准的 SQL 查询语句,用于定义视图的内容[^4]。 ##### 示例 假设有一个名为 `employees` 的表,包含字段 `id`, `name`, 和 `salary`。如果想创建一个只显示员工姓名和薪水的视图,则可以这样写: ```sql CREATE VIEW employee_salary_view AS SELECT name, salary FROM employees; ``` 此命令将创建一个名为 `employee_salary_view` 的视图[^1]。 #### 二、查询视图 一旦视图被创建,就可以像对待普通表一样对其进行查询操作。例如,继续上面的例子,我们可以这样查询该视图: ```sql SELECT * FROM employee_salary_view WHERE salary > 5000; ``` 这将返回所有工资超过 5000 的员工的名字及其对应的薪资情况[^2]。 #### 三、管理视图 除了创建和查询之外,还需要掌握如何更新或者删除已有的视图。 ##### 修改视图 可以直接使用带有 OR REPLACE 子句的新 CREATE VIEW 命令重新定义现有视图而不必先将其删除再重建新版本: ```sql CREATE OR REPLACE VIEW employee_salary_view AS SELECT id, name, salary FROM employees WHERE department='Sales'; ``` 这里我们不仅增加了部门筛选条件还加入了 ID 字段作为额外信息展示的一部分[^3]。 ##### 删除视图 当不再需要某个特定视图时,应该考虑移除它以保持数据库整洁有序。执行如下指令即可完成这一过程: ```sql DROP VIEW IF EXISTS employee_salary_view; ``` 这条语句会安全地尝试销毁指定名字下的任何现存实例——即如果没有找到同名对象则不会报错而是静默忽略掉请求[^3]。 --- ### 注意事项 需要注意的是,在构建新的虚拟表格之前应当清楚了解哪些类型的 SELECT 结构支持转换成持久化形式供后续调用者反复利用。比如不能含有某些特殊关键字如 DISTINCT , GROUP BY 等等因为它们可能破坏了原本打算呈现出来的直观映射关系[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

火眼猊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值