加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

【实战攻略】MySQL视图

发布时间:2023-07-31 15:06:12 所属栏目:MsSql教程 来源:未知
导读:

什么是视图?视图就是一张虚拟的表,我们称为视图表,但是这张虚拟的表里边的内容和真实的表内容是一样的,里边有字段,有数据,只不过这张表在服务器上不是以数据的形式存在的,就是视图

第一视图和第三视图_视图模式改成兼容视图_Mssq视图

视图模式改成兼容视图_第一视图和第三视图_Mssq视图

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

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

语法格式:

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;

视图模式改成兼容视图_第一视图和第三视图_Mssq视图

查看视图表数据内容

mysql> select * from user_view;

第一视图和第三视图_Mssq视图_视图模式改成兼容视图

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

查看数据库目录

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

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

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

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

Mssq视图_视图模式改成兼容视图_第一视图和第三视图

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

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;

视图模式改成兼容视图_Mssq视图_第一视图和第三视图

查看基表是否发生改变

mysql> select * from user;

Mssq视图_第一视图和第三视图_视图模式改成兼容视图

修改表记录

mysql> update user_view

-> set where; //修改xxoo字段的值

Query OK, 0 rows affected (0.01 sec)

查看视图表

mysql> select * from user_view;

第一视图和第三视图_视图模式改成兼容视图_Mssq视图

查看基表是否也跟着改变

mysql> select * from user;

视图模式改成兼容视图_第一视图和第三视图_Mssq视图

删除视图表记录

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;

视图模式改成兼容视图_Mssq视图_第一视图和第三视图

也会跟着改变

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

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

视图模式改成兼容视图_第一视图和第三视图_Mssq视图

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

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

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

视图模式改成兼容视图_第一视图和第三视图_Mssq视图

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

入群即可免费获得

1、必备工具源码包

2、内部精选电子书

3、运维资料大礼包

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

第一视图和第三视图_视图模式改成兼容视图_Mssq视图

视图模式改成兼容视图_Mssq视图_第一视图和第三视图

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

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章