mysql视图

时间:2021-10-14 02:53:32

mysql视图

视图简介

mysql视图是一个虚拟表,其内容由查询定义.
同真实的表一样,视图包含一系列带有名称的列和行数据
但是,视图并不在数据库中以存储的数据集形式存在
行和列数据来自,由定义视图的查询所引用的表,并且在引用视图时动态生成

mysql视图的作用类似于筛选,定义视图的筛选可以来自当前或其他数据库的一个或多个表,或者其他视图
通过视图进行查询没有任何限制,通过他们进行数据修改时的限制也很少

视图是存储在数据库中的sql查询语句
主要出于两种原因

  • 安全原因,视图可以隐藏一些数据
  • 另一原因可以使复杂的查询易于理解和使用

单表创建视图

语法

create view 视图名 as 查询语句

创建视图

mysql> create view u as
    -> select user,host from mysql.userG
Query OK, 0 rows affected (0.00 sec)

查看视图

mysql> select * from uG
*************************** 1. row ***************************
user: mysql.session
host: localhost
*************************** 2. row ***************************
user: mysql.sys
host: localhost
*************************** 3. row ***************************
user: root
host: localhost
3 rows in set (0.00 sec)

多表创建视图

准备数据

mysql> create database shop;
Query OK, 1 row affected (0.00 sec)

mysql> use shop;
mysql> create table product(
    -> id int unsigned auto_increment primary key,
    -> name varchar(60) not null,
    -> price double not null
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> insert into product(name,price) values
    -> ('apple',10),
    -> ('orange',5),
    -> ('pear',9);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> create table purchase(
    -> id int unsigned auto_increment primary key,
    -> name varchar(60) not null,
    -> quantity int not null default 0,
    -> gen_time datetime not null
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> insert into purchase(name,quantity,gen_time)
    -> values
    -> ('apple',8,now()),
    -> ('orange',5,now());
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

创建多表视图

mysql> create view purchase_detail as
    -> select
    -> a.name,a.price,
    -> b.quantity,
    -> a.price * b.quantity as total_value
    -> from product a,purchase b
    -> where a.name=b.name;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from purchase_detailG
*************************** 1. row ***************************
       name: apple
      price: 10
   quantity: 8
total_value: 80
*************************** 2. row ***************************
       name: orange
      price: 5
   quantity: 5
total_value: 25
2 rows in set (0.00 sec)

视图的查看

查看视图名

mysql> show tablesG
*************************** 1. row ***************************
Tables_in_shop: product
*************************** 2. row ***************************
Tables_in_shop: purchase
*************************** 3. row ***************************
Tables_in_shop: purchase_detail
3 rows in set (0.00 sec)

查看某个数据库中所有视图详细信息

mysql> show table status from testG

查看数据库test中视图名purchase_detail详细信息

mysql> show table status from shop like 'purchase_detail'G

查看视图定义信息

mysql> show create view purchase_detailG

查看视图结构

mysql> desc purchase_detailG

修改视图

方法一:删除后新创建
语法

drop view view_user;

方法二:alter修改视图
语法

alter view 视图名 as select语句;