【实战攻略】MySQL视图
什么是视图?视图就是一张虚拟的表,我们称为视图表,但是这张虚拟的表里边的内容和真实的表内容是一样的,里边有字段,有数据,只不过这张表在服务器上不是以数据的形式存在的,就是视图
什么是视图?视图就是一张虚拟的表,我们称为视图表,但是这张虚拟的表里边的内容和真实的表内容是一样的,里边有字段,有数据,只不过这张表在服务器上不是以数据的形式存在的,就是视图里的数据在数据库目录下是没有所对应的文件的,那视图里的数据是从哪来的呢?是从一个基表里引用来的,基表就是存储在数据库目录下的那些物理表,当我们对基表里的数据进行更新时,那视图表里的数据也会跟着更新。更新视图表的数据时,那基表里的数据也会跟着更新 那我们为什么要用视图呢?做视图是可以控制用户对表的限制,我希望用户能看到那些数据,能够对那些数据操作, 我就把那些数据做成一个视图表,然后让用户去访问视图表就可以了,基表里的所有数据它是看不到的,只能看到指定的数据,这就是视图的作用 语法格式: create view(关键字) 视图表名称 as(关键字) SQL查询; 解释:创键视图时Mssq视图,视图表里的数据完全取决于我们的SQL查询 讲视图之前先把/etc/passwd这个文件先导入到数据库里去 进入数据库创键表 mysql> create database userdb; Query OK, 1 row affected (10.00 sec) 进入库 mysql> use userdb; 创键表,根据文件内容创键表 mysql> create table user( -> name char(30), -> passwd char(1), -> uid smallint(3), -> gid smallint(3), -> info char(100), -> home char(100), -> shell char(50) -> ); Query OK, 0 rows affected (0.01 sec) 查看导入路径 mysql> show variables like "secure_file_priv"; 拷贝系统文件到MySQL默认导入路径 [root@master ~]# cp /etc/passwd /var/lib/mysql-files/ 执行数据导入 mysql> load data infile "/var/lib/mysql-files/passwd" //指定导入文件路径 -> into table user //指定导入当前库的user表 -> fields terminated by ":" //指定文件内的分隔符 -> lines terminated by "\n"; //指定换行符 Query OK, 21 rows affected (0.05 sec) 查看表数据 mysql> mysql> select * from user; 向表里添加行号字段 mysql> alter table user -> add ID smallint(3) primary key auto_increment first; //设置主键与自增长,添加在所有字段前边 Query OK, 0 rows affected (0.04 sec) 查看表记录 mysql> select * from user; 到此为止环境就没问题了 创键视图 mysql> create view user_view as select name,shell from user; Query OK, 0 rows affected (0.01 sec) 查看表 mysql> show tables; 查看视图表数据内容 mysql> select * from user_view; 这张视图表创键了以后,它不会以物理文件的形式存储在数据库目录下的 查看数据库目录 [root@master~]#ls /var/lib/mysql/userdb/ 这里只有一个表结构文件,没有数据文件的,数据是在基表里存储着呢,当我们创键完视图表以后,我们就可以授权用户去访问视图表里的数据了,基表就不让它访问了,我希望让他看到多少数据,那我们在创键视图的时候是可以自己指定的 如何查看哪个表是视图表?通过查看表的状态信息可以查看出来 mysql> show table status\G; //查看当前库下所有表信息 这种方法查出来的是当前库下所有表的状态信息,如果我只想查看那些表是视图表,那可以加条件的查 mysql> show table status where comment="view"\G; 解释:加条件查看comment字段的值等于view的,这时候显示出来的就是所有视图表的信息了 那接下来我们如何查看我视图表里的信息是来自于哪个基表呢?那这时候我们就需要查看创键视图的命令信息了 查看视图创键命令 mysql> mysql> show create view user_view\G; 通过这些信息我们就可以判断视图表的数据是来自于那张基表了 使用视图 那接下来我们就开始对视图表进行增删改查,那查询的命令我们刚才已经查过了,就跟查普通的表是一样的 mysql> select * from user_view; 向表里插入记录 mysql> insert into user_view values("xxoo","/sbin/nologin"); Query OK, 1 row affected (0.01 sec) 查看表记录 mysql> select * from user_view; 查看基表是否发生改变 mysql> select * from user; 修改表记录 mysql> update user_view -> set where; //修改xxoo字段的值 Query OK, 0 rows affected (0.01 sec) 查看视图表 mysql> select * from user_view; 查看基表是否也跟着改变 mysql> select * from user; 删除视图表记录 mysql> delete from user_view where; Query OK, 1 row affected (0.01 sec) 查看视图表记录 mysql> select * from user_view; 查看基表 mysql> select * from user; 我们现在对视图表做的增删改的时候,基表也是会发生改变的,那相反,如果我们对基表进行增删改的时候,视图表也会跟着一起改变 对基表插入记录 mysql> insert into user(name,shell) values("haha","/bin/bash"); Query OK, 1 row affected (0.01 sec) 查看基表数据 mysql> select * from user; 查看视图表 mysql> select * from user_view; 也会跟着改变 如果我们在基表里增加一条视图表里没有的字段,那视图表还会不会跟着改变呢? mysql> insert into user(ID) values("50"); Query OK, 1 row affected (0.00 sec) 查看视图表 mysql> select * from user_view; 如果视图表里没有的字段,它就会用空值来表示,这也是它的一个特性,没有的字段就用空表示,空其实就是没有值,所以也没有什么影响,以上就是如何对视图表进行增删改查,那如果直接把视图表删了,那基表还会在吗?删除视图表的话,基表是不会跟着删除的 删除视图表 mysql> drop view user_view; Query OK, 0 rows affected (0.00 sec) 查看表 mysql> show tables; 删除视图表,基表是不会跟着删除的,那如果删除基表了,那视图表还会在吗? 那在创键一个视图表试试看 mysql> create view user_view as select name,shell from user; Query OK, 0 rows affected (0.00 sec) 查看视图表 mysql> select * from user_view; 删除基表 mysql> drop table user; Query OK, 0 rows affected (0.00 sec) 查看表 mysql> show tables; 查看视图数据 mysql> select * from user_view; ERROR 1356 (HY000): View 'userdb.user_view' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them 解释:报错了,为啥会报错呢?明明表还在,但是为啥查不到数据了呢?应为视图里的数据是来自于基表,基表都没了,那视图那怎么可能查的到数据,能理解吧!但是为啥这个表还在呢?那是应为这个表结构的文件是以物理的形式存放在数据库目录下的,所以这个表还是在的,但是就是查不到数据了,说白了,基表删了,视图表就不能用了,这就是mysql视图,就是用来限制用户对表的数据访问权限的 为方便五湖四海的Linux爱好者共同 学(吹)习(牛)讨(打)论(趣) 热烈欢迎大家加入专属QQ群 群内定时上传资料还有老师全天答疑 入群即可免费获得 1、必备工具源码包 2、内部精选电子书 3、运维资料大礼包 欲知更多福利,欢迎你的加入 发现“分享”和“赞”了吗,戳我看看吧 (编辑:青岛站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |