MySql视图
2023-02-20 本文已影响0人
技术老男孩
一、MySql视图概念:
- 类似于linux系统的链接文件(ln)
- 视图只有表头,没有数据,使用视图数据时,会从原来的表中取出对应的数据
- 创建视图表所生成的
/var/lib/mysql/库/表
路径中只有ibd文件(存放表头信息) - 访问视图,查看到的数据由创建视图时,执行的查询语句决定
- 一旦视图表中的数据发生改变,原来表中的数据也会发生变化,反之亦然
- 创建的视图库,也可以创建普通的表
二、MySql视图的优点:
- 简单:用户不需要知道视图的数据来源,视图中的数据已经实时时过滤好的符合条件的结果集
- 安全:用户只能看到视图中的数据
- 数据独立:一旦视图结构确定,可以屏蔽表结构对用户的影响
三、语法格式:
创建视图
create view 库.视图名称 as Select查询命令;
create view 库.视图名称(字段名列表) as Select查询命令;查看视图
- 查看当前库里哪些表是视图
use 库.视图名称;
show table status where comment="VIEW"\G- 查看视图表里的数据是从哪个基表获取的
show create view 库.视图名称 \G操作视图
与普通表一样(select insert update delete)
删除视图
drop view 库.视图名称;
四、使用示例:
- 创建视图
# 创建一个库,用来存放视图表
mysql> create database viewdb1;
# 创建一个基于tarena.user表的视图
mysql> create view viewdb1.vtab1(姓名,用户编号) as select name,uid from tarena.user;
Query OK, 0 rows affected (0.00 sec)
mysql> desc viewdb1.vtab1;
+--------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+----------+------+-----+---------+-------+
| 姓名 | char(20) | YES | | NULL | |
| 用户编号 | int(11) | YES | | NULL | |
+--------------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)
- 查看视图
# 进入viewdb1视图表中
mysql> use viewdb1
# 查看当前库里哪些表是视图
mysql> show table status where comment="VIEW" \G
*************************** 1. row ***************************
Name: vtab
Engine: NULL
Version: NULL
Row_format: NULL
Rows: NULL
Avg_row_length: NULL
Data_length: NULL
Max_data_length: NULL
Index_length: NULL
Data_free: NULL
Auto_increment: NULL
Create_time: NULL
Update_time: NULL
Check_time: NULL
Collation: NULL
Checksum: NULL
Create_options: NULL
Comment: VIEW
# 查看视图表里的数据是从哪个基表获取的
mysql> show create view viewdb1.vtab1 \G
*************************** 1. row ***************************
View: vtab1
Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `vtab1` AS select `tarena`.`user`.`name` AS `姓名`,`tarena`.`user`.`uid` AS `用户编号` from `tarena`.`user`
character_set_client: utf8
collation_connection: utf8_general_ci
1 row in set (0.00 sec)
- 删除视图
mysql> drop viewdb1.vtab;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'viewdb1.vtab' at line 1
# 需要加上view才能删除成功
mysql> drop view viewdb1.vtab;
Query OK, 0 rows affected (0.00 sec)