mysql 行号_【实战攻略】MySQL视图

点击蓝字

关注我们

b7c3564eb8ea586a6a46de19fba81d0e.png a3046fd489a4babc792fc14753dcacfc.gif

什么是视图?视图就是一张虚拟的表,我们称为视图表,但是这张虚拟的表里边的内容和真实的表内容是一样的,里边有字段,有数据,只不过这张表在服务器上不是以数据的形式存在的,就是视图里的数据在数据库目录下是没有所对应的文件的,那视图里的数据是从哪来的呢?是从一个基表里引用来的,基表就是存储在数据库目录下的那些物理表,当我们对基表里的数据进行更新时,那视图表里的数据也会跟着更新。更新视图表的数据时,那基表里的数据也会跟着更新

那我们为什么要用视图呢?做视图是可以控制用户对表的限制,我希望用户能看到那些数据,能够对那些数据操作, 我就把那些数据做成一个视图表,然后让用户去访问视图表就可以了,基表里的所有数据它是看不到的,只能看到指定的数据,这就是视图的作用

语法格式:

create  view(关键字)  视图表名称   as(关键字)   SQL查询;

解释:创键视图时,视图表里的数据完全取决于我们的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;

824d25e177e5c986ec0c05528e86f25e.png

查看视图表数据内容

mysql> select * from user_view;

ece35ea86107fc9d694ffa20a1cba6f1.png

这张视图表创键了以后,它不会以物理文件的形式存储在数据库目录下的

查看数据库目录

[root@master~]#ls /var/lib/mysql/userdb/

828ec02e79c798de1955601e0c5167a5.png

这里只有一个表结构文件,没有数据文件的,数据是在基表里存储着呢,当我们创键完视图表以后,我们就可以授权用户去访问视图表里的数据了,基表就不让它访问了,我希望让他看到多少数据,那我们在创键视图的时候是可以自己指定的

如何查看哪个表是视图表?通过查看表的状态信息可以查看出来

mysql> show table status\G; //查看当前库下所有表信息

c3f3f7e4cfa4529ec42d4e95985c4e69.png

这种方法查出来的是当前库下所有表的状态信息,如果我只想查看那些表是视图表,那可以加条件的查

mysql> show table status where comment="view"\G;

解释:加条件查看comment字段的值等于view的,这时候显示出来的就是所有视图表的信息了

那接下来我们如何查看我视图表里的信息是来自于哪个基表呢?那这时候我们就需要查看创键视图的命令信息了

查看视图创键命令

mysql> mysql> show create view user_view\G;

1ea776614a9ffc91c6ba11e4dbe23d0d.png

通过这些信息我们就可以判断视图表的数据是来自于那张基表了

使用视图

那接下来我们就开始对视图表进行增删改查,那查询的命令我们刚才已经查过了,就跟查普通的表是一样的

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;

e5c68ee2ca7e3f1021520a8ad2c869aa.png

查看基表是否发生改变

mysql> select * from user;

831cdacae0d42b898c923b105c8f9c26.png

修改表记录

mysql> update user_view

    -> set name="xxxx" where name="ooxx";        //修改xxoo字段的值

Query OK, 0 rows affected (0.01 sec)

查看视图表

mysql> select * from user_view;

6320eb82a37114a72b85030239fbb5a3.png

查看基表是否也跟着改变

mysql> select * from user;

13f604c4c99e7c1b8bac77444175c494.png

删除视图表记录

mysql> delete from user_view where name="xxxx";

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;

341f8fbc8816615d30e823161e4abafe.png

查看视图表

mysql> select * from user_view;

2b08602a26d3ebff4f0afe53e309f954.png

也会跟着改变

如果我们在基表里增加一条视图表里没有的字段,那视图表还会不会跟着改变呢?

mysql> insert into user(ID) values("50");

Query OK, 1 row affected (0.00 sec)

查看视图表

mysql> select  * from user_view;

593b071e966832be1da2f688c6684995.png

如果视图表里没有的字段,它就会用空值来表示,这也是它的一个特性,没有的字段就用空表示,空其实就是没有值,所以也没有什么影响,以上就是如何对视图表进行增删改查,那如果直接把视图表删了,那基表还会在吗?删除视图表的话,基表是不会跟着删除的

删除视图表

mysql> drop view user_view;

Query OK, 0 rows affected (0.00 sec)

查看表

mysql> show tables;

213e7f4f727d6153a2cf541a8aeb8a67.png

删除视图表,基表是不会跟着删除的,那如果删除基表了,那视图表还会在吗?

那在创键一个视图表试试看

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;

a5930734d7d4b127ff8d6135347e45f6.png

查看视图数据

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视图,就是用来限制用户对表的数据访问权限的

a3046fd489a4babc792fc14753dcacfc.gif f38aa140f3b212b7ea289d5e994b96d9.png

为方便五湖四海的Linux爱好者共同

学(吹)习(牛)讨(打)论(趣)

热烈欢迎大家加入专属QQ群

00267f96d2fe67f875ee05da05621048.png

群内定时上传资料还有老师全天答疑

入群即可免费获得

1、必备工具源码包

2、内部精选电子书

3、运维资料大礼包

欲知更多福利,欢迎你的加入

de9d04f443eea9ef1c4340becad39add.png 11e3104906dd0c409246e2f1bf44a249.gif

发现“分享”“赞”了吗,戳我看看吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值