视图

本文详细介绍了SQL中的视图概念,视图是一个由查询语句定义的虚拟表,显示最新数据。文章涵盖了视图的创建、修改和删除的语法及示例,强调了在创建视图时的数据安全选项以及视图使用中的注意事项。

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

1. 视图的定义

视图是一个由查询语句定义数据内容的表。表中的数据内容就是SQL查询语句的结果集。

视图是虚拟的表
视图总是显示最近的数据。当用户查询视图时,数据库都将重建数据

2. 视图的创建/修改和删除

2.1 视图的创建

语法

create [algorithm={undefined / merge / temptable}]
view view_name as
select column_name(s) from table_name
[with [cascaded / local] check option];
  • algorithm: 可选,表示视图选择的算法
    • undefined: mysql自动选择使用的算法
    • merge: 表示将视图的语句与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分
    • temptable: 表示将视图的结果存入临时表,然后使用临时表执行语句
  • view_name: 视图的名称,可包含属性列表
  • column_name(s) : 查询的字段,也就是视图的列名。
  • table_name: 从哪个数据库获取数据
  • with check option: 可选,表示更新视图时要保证在视图的权限范围内。
    • caseaded: 表示更新视图要满足所有相关视图和表的条件才进行更新
    • local: 表示更新视图时,要满足该视图本身定义的条件即可更新

with check option虽是可选属性,为了数据安全,建议使用

示例1

create view kcmc
as select sid from student
with local check option;

默认档期数据库下创建视图,可以指定:db_name.view_name
如:create view test.v as select * from t;
数据库不能包含具有相同名称的表和视图
视图能够引用表或其他数据库中的视图
能够使用联合/UNION和子查询

示例2

CREATE TABLE t(
qty INT,
price INT
);
INSERT INTO t VALUE(3, 50);
--创建视图
CREATE VIEW v AS SELECT qty, price, qty*price AS VALUE FROM t;

SELECT * FROM v;

视图定义服从以下限制:

  1. select语句不能包含from子句中的子查询
  2. select语句不能引用系统或用户变量
  3. select语句不能引用预处理语句参数
  4. 在存储子程序内,定义不能引用子程序参数或局部变量
  5. 定义中引用的表或视图必须存在。但是,创建视图后,能够舍弃定义引用的表或视图。可以使用check table语句,检查视图定义是否存在这类问题
  6. 定义中不能使用temporary表,不能创建temporary视图
  7. 定义中命名的表必须已存在
  8. 不能将触发程序与视图关联在一起
  9. 视图定义中允许使用order by,但是,如果从特定视图进行了选择,而该视图使用了具有自己order by的语句,它将被忽略
  10. 对应定义中的其他选项或子句,他们将被增加到引用视图的语句的选项或子句中,但效果未定义。
  11. 如果创建了视图,并通过更改系统变量更改了查询处理环境,会影响从视图获得的结果

2.2 视图的修改

当视图定义的数据表发生了变化,需要对视图进行修改来保证查询的正确进行

视图存在,进行修改,视图不存在,创建视图
语法

create or replace [algorithm={undefined / merge / temptable}]
view view_name[(属性清单)] as
select column_name(s) from table_name
[with [cascaded / local] check option];
  • 属性清单:可选,指定视图中各个属性的名词,默认情况,与select语句中查询的属性相同

示例

create or replace view kcmc(学生ID, 学生姓名)
as select sid, sname from student
with local check option;

2.3 删除视图

删除视图不会删除数据,只是删除视图的结构定义

语法

drop view [if exists] view_name [, view_name1, view_name2...]

示例

drop view kcmc;

3. 视图的使用

/**** 1、创建和删除视图 ****/

// 创建视图(指定某些字段,显示字段时重命名),后面还可以接WHERE进行条件查询
CREATE VIEW v1(b,a) AS SELECT bookName, author FROM t_book;
// 通过视图来查询(只能查询到指定的字段,提高了安全性)
SELECT * FROM v1;

// 删除视图(视图只是一种虚拟的表,删除视图对原来的数据表没有影响)
DROP VIEW IF EXISTS v1;

/**** 2、查看视图 ****/

// 查看视图
desc v1;

// 查看视图基本信息
SHOW TABLE STATUS LIKE 'v1';

// 查看视图详细信息
SHOW CREATE VIEW v1;

/**** 3、修改视图 ****/

// 修改视图
CREATE OR REPLACE VIEW v1(b,p) AS SELECT bookName, price FROM t_book;

ALTER VIEW v1 AS SELECT * FROM t_book;

/**** 4、更新视图 ****/

// 向视图中插入数据(其实就是在表中插入数据)
INSERT INTO v1 VALUES ( "6", "中国历史", "MK", "45", "4");

// 更新视图的数据
UPDATE v1 SET price=54 WHERE id=6;

// 删除视图的数据
DELETE FROM v1 WHERE id=6;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值