mysql数据库—视图

1、视图的介绍

        视图是一张虚拟表,是从数据库中一个或多个表中导出来的表,其内容由查询定义。同真实表一样,视图包含一系列带有名称的列和行数据,数据库中只存放了视图的定义,而并没有存放视图中的数据。这些数据存放在原来的表中。使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。一旦表中的数据发生改变,显示在视图中的数据也会发生改变。

2、视图的优点

        简单:用户无需关心视图中的数据如何查询获得的,视图中的数据已经是过滤好的符合条件的结果集

        安全:用户只能看到视图中的数据

        数据独立:一旦视图结构确定,可以屏蔽表结构对用户的影响

3、操作案例

3.1、创建视图:create view 库.视图名称(字段名列表) as  SQL查询;

mysql> create database viewst;
mysql> create view viewst.a1 as select name,uid from tarena.user;
Query OK, 0 rows affected (0.00 sec)
mysql> show tables;
+------------------+
| Tables_in_viewst |
+------------------+
| a1               |
+------------------+
1 row in set (0.00 sec)

mysql> select * from a1;
+-----------------+-------+
| name            | uid   |
+-----------------+-------+
| root            |     0 |
| bin             |     1 |
| daemon          |     2 |
| adm             |     3 |
………………………………


mysql> create view viewst.a2(姓名,家目录,登录状态) as select name,homedir,shell from tarena.user;
Query OK, 0 rows affected (0.00 sec)

mysql> show tables;
+------------------+
| Tables_in_viewst |
+------------------+
| a1               |
| a2               |
+------------------+
2 rows in set (0.00 sec)

mysql> select * from viewst.a2;
+-----------------+--------------------+----------------+
| 姓名            | 家目录             | 登录状态       |
+-----------------+--------------------+----------------+
| root            | /root              | /bin/bash      |
| bin             | /bin               | /sbin/nologin  |
……………………………………

3.2、查看视图:查询视图表里的数据是从哪个基表获取的

mysql> use viewst;
Database changed
mysql> show table status where comment="view" \G       #查询视图表名
mysql> show create view viewst.a1 \G                   #查询视图表的详细信息
*************************** 1. row ***************************
                View: a1
         Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `a1` AS select `tarena`.`user`.`name` AS `name`,`tarena`.`user`.`uid` AS `uid` from `tarena`
.`user`character_set_client: utf8
collation_connection: utf8_general_ci
1 row in set (0.00 sec)

3.3、操作视图 select  insert  update  delete

        当对视图里的数据做 insert 、update 、delete,对应的基本数据也会跟着改变。

3.4、删除视图

mysql> drop view viewst.a2;
Query OK, 0 rows affected (0.00 sec)

3.5、视图进阶:创建视图时,select命令查询的表里有同名的字段时,就需要设置查询语句中的字段别名,视图的表头名不能重要。

mysql> create table tarena.t1 select name,uid from tarena.user limit 1;
mysql> create table tarena.t2 select name,uid from tarena.user limit 3;
mysql> use tarena;
mysql> create view a3 as select t1.name as username,t2.name as 姓名 from t1 inner join t2 on t1.name=t2.name;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from a3;
+----------+--------+
| username | 姓名   |
+----------+--------+
| root     | root   |
+----------+--------+
1 row in set (0.00 sec)

3.6、覆盖的方式创建视图,达到修改已有视图的目的,

        or replace:覆盖原有视图,能够实现修改视图的目的

mysql> create or replace view viewst.a1 as select name,uid,gid from tarena.user;
Query OK, 0 rows affected (0.00 sec)

3.7、修改视图进阶,默认情况下通过视图修改数据是不受限制,可以设置通过视图修改数据受限制,限制的方式如下:

格式:

        with [选项] check option表示更新视图时要保证在该视图的范围之内

选项:

  •         local:首先满足自身的限制 ,同时要满足基表的限制
    •         cascaded:默认值,满足视图自身限制即可

with check option支持的检查选项

mysql> create view viewst.b1 as select name,uid from tarena.user where uid > 10 with check option;
Query OK, 0 rows affected (0.00 sec)
mysql> use viewst;

mysql> update b1 set uid=1 where name="root";      #条件不成立,不会执行修改     
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0
mysql> select * from b1 where name="root";
Empty set (0.00 sec)

mysql> select * from b1 where name="ftp";
+------+------+
| name | uid  |
+------+------+
| ftp  |   14 |
+------+------+
1 row in set (0.00 sec)

mysql> update b1 set uid=8 where name="ftp";              #条件>10不成立,执行不成功
ERROR 1369 (HY000): CHECK OPTION failed 'viewst.b1'
mysql> update b1 set uid=11 where name="ftp";             #条件>10不成立,执行成功
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from b1 where name="ftp";
+------+------+
| name | uid  |
+------+------+
| ftp  |   11 |
+------+------+
1 row in set (0.00 sec)

with local check option首先满足自身的限制 ,同时要满足基表的限制

mysql> create view  b2  as select name ,uid  from  b1 where uid>=18 with  local check option;
Query OK, 0 rows affected (0.01 sec)

#条件要满足基表>10同时也要满足视图本身的>=18的条件
mysql> update b2 set uid=15 where name="sshd";   
ERROR 1369 (HY000): CHECK OPTION failed 'viewst.b2'
mysql> update b2 set uid=20 where name="sshd";
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值