一、视图

1.视图简介:

视图就是一张虚表,和真实的表一样。视图包含一系列带有名称的行和列数据。视图是从一个或多个表中导出来的,我们可以通过insert,update,delete来操作视图。当通过视图看到的数据被修改时,相应的原表的数据也会变化。同时原表发生变化,则这种变化也可以自动反映到视图中。

2.视图的优点:

  • 简单化:看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化操作。经常被使用的查询可以制作成一个视图
  • 安全性:通过视图用户只能查询和修改所能见到的数据,数据库中其他的数据既看不见也取不到。数据库授权命令可以让每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定的行,列上。
  • 逻辑数据独立性:视图可帮助用户屏蔽真实表结构变化带来的影响

3.视图和表的区别:

  • 视图是已经编译好的SQL语句,是基于SQL语句的结果集的可视化的表。而表不是。
  • 视图没有实际的物理记录,而表有。
  • 表是内容,视图窗口 。
  • 表和视图虽然都占用物理空间,但是视图只是逻辑概念存在,而表可以及时对数据进行修改,但是视图只能用创建语句来修改 。
  • 视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL 语句的集合。从安全角度来说,视图可以防止用户接触数据表,因而不知道表结构。
  • 表属于全局模式中的表,是实表。而视图属于局部模式的表,是虚表 。
  • 视图的建立和删除只影响视图本身,而不影响对应表的基本表。

4.视图和表的联系:

视图是在基本表之上建立的表,它的结构和内容都来自于基本表,它依赖基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本的抽象和逻辑意义上建立的关系。

5.视图在什么情况下会无法执行更新

  • 视图中不包含基表中被定义为非空的列 。
  • 在定义视图的select语句后的字段列表中使用了数学表达式 。
  • 在定义视图的select 语句后字段列表中使用了聚合函数时不接受更新操作 。
  • select中,使用了union \top \group by 或having 无法接受。

6.语法:

[algroithm视图选择的算法={undefined|merge |temptable}]

  • Undefined:不常用。
  • merge :表示将使用的视图语句与视图定义合并起来,使视图定义的某一部分取代语句对应的部分
  • temptable :表示将视图的结果存入临时表,然后用临时表来执行语句

with[cascaded|local]

  • Cascaded :默认为cascaded,表示更新视图时,满足所有相关视图和表的条件
  • Local :表示更新视图时,满足该视图本身定义的条件即可

二、视图基本操作

2.1 创建单表视图

mysql> create table t1(quantity int,price int);
Query OK, 0 rows affected (0.02 sec)mysql> insert into t1 values (3,50);
Query OK, 1 row affected (0.01 sec)#创建单表视图
mysql> create view view_test(quantity,price,total) as select quantity,price,quantity*price from t1;
Query OK, 0 rows affected (0.00 sec)#查看视图中反馈的内容
mysql> select * from view_test;
+----------+-------+-------+
| quantity | price | total |
+----------+-------+-------+
|        3 |    50 |   150 |
+----------+-------+-------+
1 row in set (0.00 sec)

2.2 创建多表视图

2.2.1 多表操作

mysql> create table student-> (-> s_id int(3) primary key,-> s_name varchar(30),-> s_age int (3),-> s_sex varchar(8)-> );
Query OK, 0 rows affected (0.10 sec)mysql> create table stu_info-> (-> s_id int(3),-> class varchar(50),-> addr varchar(100)-> );
Query OK, 0 rows affected (0.12 sec)#插入数据
mysql> insert into stu_info values-> (1,'erban','anhui'),-> (2,'sanban','chongqing'),-> (3,'yiban','shangdong');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0#创建多表视图
mysql> create view stu_class(id,name,class) as -> select  student.s_id,student.s_name,stu_info.class from student,stu_info-> where student.s_id=stu_info.s_id;
Query OK, 0 rows affected (0.00 sec)#查看视图的基本结构
mysql> desc stu_class;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(3)      | NO   |     | NULL    |       |
| name  | varchar(30) | YES  |     | NULL    |       |
| class | varchar(50) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)#查看视图的基本信息
mysql> show table status like 'stu_class'\G
*************************** 1. row ***************************Name: stu_classEngine: NULLVersion: NULLRow_format: NULLRows: NULLAvg_row_length: NULLData_length: NULL
Max_data_length: NULLIndex_length: NULLData_free: NULLAuto_increment: NULLCreate_time: NULLUpdate_time: NULLCheck_time: NULLCollation: NULLChecksum: NULLCreate_options: NULLComment: VIEW
1 row in set (0.00 sec)#查看视图的详细信息
mysql> show create view stu_class\G
*************************** 1. row ***************************View: stu_classCreate View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `stu_class` AS select `student`.`s_id` AS `id`,`student`.`s_name` AS `name`,`stu_info`.`class` AS `class` from (`student` join `stu_info`) where (`student`.`s_id` = `stu_info`.`s_id`)
character_set_client: utf8
collation_connection: utf8_general_ci
1 row in set (0.00 sec)

2.2.2 查看数据库中的视图

查询数据库中所有的视图

#直接查询information_schema库中的views表,来查看所有的视图mysql> select * from information_schema.views\G
*************************** 1. row ***************************TABLE_CATALOG: defTABLE_SCHEMA: testTABLE_NAME: view_tVIEW_DEFINITION: select `test`.`t`.`quantiy` AS `quantiy` from `test`.`t`CHECK_OPTION: NONEIS_UPDATABLE: YESDEFINER: root@localhostSECURITY_TYPE: DEFINER
CHARACTER_SET_CLIENT: utf8
COLLATION_CONNECTION: utf8_general_ci
*************************** 2. row ***************************TABLE_CATALOG: defTABLE_SCHEMA: testTABLE_NAME: view_t2VIEW_DEFINITION: select `test`.`t`.`quantiy` AS `qty`,`test`.`t`.`price` AS `price`,(`test`.`t`.`quantiy` * `test`.`t`.`price`) AS `total` from `test`.`t`CHECK_OPTION: NONEIS_UPDATABLE: YESDEFINER: root@localhostSECURITY_TYPE: DEFINER
CHARACTER_SET_CLIENT: utf8
COLLATION_CONNECTION: utf8_general_ci
104 rows in set (0.02 sec)

查询指定数据库中的视图

#where后面指定一个库名,也就是查看指定库中的所有视图mysql>  select * from information_schema.views where table_schema = 'mytest'\G
*************************** 1. row ***************************TABLE_CATALOG: defTABLE_SCHEMA: mytestTABLE_NAME: stu_classVIEW_DEFINITION: select `mytest`.`student`.`s_id` AS `id`,`mytest`.`student`.`s_name` AS `name`,`mytest`.`stu_info`.`class` AS `class` from `mytest`.`student` join `mytest`.`stu_info` where (`mytest`.`student`.`s_id` = `mytest`.`stu_info`.`s_id`)CHECK_OPTION: NONEIS_UPDATABLE: YESDEFINER: root@localhostSECURITY_TYPE: DEFINER
CHARACTER_SET_CLIENT: utf8
COLLATION_CONNECTION: utf8_general_ci
*************************** 2. row ***************************TABLE_CATALOG: defTABLE_SCHEMA: mytestTABLE_NAME: view_testVIEW_DEFINITION: select `mytest`.`t1`.`quantity` AS `quantity`,`mytest`.`t1`.`price` AS `price`,(`mytest`.`t1`.`quantity` * `mytest`.`t1`.`price`) AS `total` from `mytest`.`t1`CHECK_OPTION: NONEIS_UPDATABLE: YESDEFINER: root@localhostSECURITY_TYPE: DEFINER
CHARACTER_SET_CLIENT: utf8
COLLATION_CONNECTION: utf8_general_ci
2 rows in set (0.00 sec)

2.3 修改视图

2.3.1 create

  • or replace:替换
#创建视图view_a
mysql> create or replace view  view_a as select * from t1;
Query OK, 0 rows affected (0.00 sec)mysql> desc view_a;
+----------+---------+------+-----+---------+-------+
| Field    | Type    | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| quantity | int(11) | YES  |     | NULL    |       |
| price    | int(11) | YES  |     | NULL    |       |
+----------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)mysql> select * from view_a;
+----------+-------+
| quantity | price |
+----------+-------+
|        3 |    50 |
+----------+-------+
1 row in set (0.00 sec)

2.3.2 alter

#修改视图view_a
mysql> alter view view_a as select  quantity from t1;
Query OK, 0 rows affected (0.01 sec)mysql> desc view_a;
+----------+---------+------+-----+---------+-------+
| Field    | Type    | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| quantity | int(11) | YES  |     | NULL    |       |
+----------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)mysql> select * from view_a;
+----------+
| quantity |
+----------+
|        3 |
+----------+
1 row in set (0.00 sec)

2.4 更新视图

2.4.1 Update更新

#查看表以及视图的数据,其中quantity对应视图的abc字段
mysql> select * from t1;
+----------+-------+
| quantity | price |
+----------+-------+
|        3 |    50 |
+----------+-------+
1 row in set (0.00 sec)mysql> select * from view_a;
+----------+
| quantity |
+----------+
|        3 |
+----------+
1 row in set (0.00 sec)#更新视图
mysql> update view_a set quantity=5;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0#查看更新后的视图
mysql> select * from view_a;
+----------+
| quantity |
+----------+
|        5 |
+----------+
1 row in set (0.00 sec)#查看更新后的表中对应视图中的数据
mysql> select * from t1;
+----------+-------+
| quantity | price |
+----------+-------+
|        5 |    50 |
+----------+-------+
1 row in set (0.00 sec)

2.4.2 Insert更新

#对表插入数据
mysql> insert into t1 values(3,5);
Query OK, 1 row affected (0.00 sec)#查询更新后的表
mysql> select * from t1;
+----------+-------+
| quantity | price |
+----------+-------+
|        5 |    50 |
|        3 |     5 |
+----------+-------+
2 rows in set (0.00 sec)#查询更新后的视图
mysql> select * from view_a;
+----------+
| quantity |
+----------+
|        5 |
|        3 |
+----------+
2 rows in set (0.00 sec)

2.4.3 delete删除表数据

mysql> select * from view_a;
+----------+
| quantity |
+----------+
|        5 |
|        3 |
+----------+
2 rows in set (0.00 sec)#删除指定表和视图表中的数据
mysql> delete from view_a where quantity=3;
Query OK, 1 row affected (0.00 sec)mysql> select * from view_a;
+----------+
| quantity |
+----------+
|        5 |
+----------+
1 row in set (0.00 sec)

2.5 删除视图

#删除指定视图
mysql> drop view if exists stu_class;
Query OK, 0 rows affected (0.00 sec)mysql> drop view if exists stu_class;
Query OK, 0 rows affected, 1 warning (0.00 sec)#查看上一条命令反馈的警告!!!
mysql> show warnings;
+-------+------+----------------------------------+
| Level | Code | Message                          |
+-------+------+----------------------------------+
| Note  | 1051 | Unknown table 'mytest.stu_class' |
+-------+------+----------------------------------+
1 row in set (0.00 sec)#查询删除的视图是否已删除
mysql> SHOW CREATE VIEW stu_class;
ERROR 1146 (42S02): Table 'mytest.stu_class' doesn't exist

Linux——MySQL视图相关推荐

  1. 查看linux mysql 账户权限设置_Linux下mysql新建账号及权限设置各种方式总结

    来自:http://justcoding.iteye.com/blog/1941116 1.权限赋予 说明:mysql部署在服务器A上,内网上主机B通过客户端工具连接服务器A以进行数据库操作,需要服务 ...

  2. Linux MYSQL 数据库

    Linux MYSQL  数据库 1.1.概述: DBMS datebase management system  数据库管理系统 DML:date manapulate lanaguage  数据操 ...

  3. mysql 视图 数据相加_MySQL

    查看安装路径 ps -ef|grep mysql 1,配置linux虚拟机,修改IP ????? vim /etc/sysconfig/network-scripts/ifcfg-eth0 2,配置完 ...

  4. Linux Mysql 数据库基础

    目录 Linux Mysql 数据库基础 一.数据库 数据库简介 数据库的分类 数据库的发展史 数据库系统发展阶段 DBMS 数据库管理系统 数据库管理系统的优点 数据库管理系统的基本功能 数据库系统 ...

  5. linux mysql 主从 1130_Linux Mysql 1130错误解决

    Linux Mysql 1130错误解决 今天在win32下通过navicat 远程登录Mysql时出现如下错误: 想都不用想,肯定是Mysql的访问权限问题. 首先,通过终端(我用的是SSH)远程登 ...

  6. linux mysql 命令 大全

    linux mysql 命令 大全 1.linux下启动mysql的命令:   mysqladmin start /ect/init.d/mysql start (前面为mysql的安装路径) 2.l ...

  7. 【数据库优化专题】MySQL视图优化(一)

    本期数据库优化专题分享,为大家带来的是DBA+社群MySQL领域原创专家--李海翔所著的MySQL视图优化系列文章.以下是第一部分的内容,未完部分敬请关注后续更新. 专家简介 李海翔 网名:那海蓝蓝 ...

  8. Linux mysql 5.6: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (usin

    Linux mysql 5.6: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using pass... 时间 201 ...

  9. 解决linux mysql命令 bash: mysql: command not found 的方法

    解决linux mysql命令 bash: mysql: command not found 的方法 参考文章: (1)解决linux mysql命令 bash: mysql: command not ...

最新文章

  1. matplotlib将图绘制在多福图中
  2. java内存模型与volatile变量与Atomic的compareAndSet
  3. 大数据产业正处在蓬勃发展的孕育期与机遇期
  4. Java求n以内素数_求0到n之间素数个数的序列(Java)
  5. 【逆向分析】快速查找指定代码的几种方法
  6. linux权限-m,Linux笔记:权限管理
  7. 别拿Excel糊弄老板了!IT总监做报表好看且简单,诀窍在哪
  8. linux sudo 命令
  9. 威纶通触摸屏离线模拟正常,为什么下载到屏幕后部分按钮开关等不显示?
  10. halcon深度学习
  11. 热传导问题的matlab计算,热传导问题的MATLAB数值计算
  12. 移动安全-APK加壳
  13. Linux 路由表和静态路由
  14. numpy.percentile()函数
  15. 中秋祝福代码,中秋快乐代码,采用H5制作的中秋动画祝福
  16. 【财富空间】一个人彻底的改变 一定始于内心的改变
  17. 布袋除尘器--预喷涂
  18. SqlCommand对象-ExecuteNonQuery()方法的使用
  19. 需求分析挑战之旅(疯狂的订餐系统)(5)——领导“突发奇想”
  20. Meta Learning/Learning to Learn, 到底我们要学会学习什么?||介绍了几篇元学习文章

热门文章

  1. 联通管理员用户密码获取办法
  2. 计算机网络思科考试答案参考--网络应用通信考试
  3. 微博相互关注互粉mysql表实现_新浪微博的“关注功能”数据库是如何设计的
  4. Windows10最优设置
  5. 图书馆管理系统--stage2核心代码实现
  6. nvm 1.1.6百度网盘下载
  7. python算法设计 - 二进制
  8. s7300的db块详细说明_(转载)一张表搞清楚西门子S7系列标准DB块与优化DB块
  9. VueCli3开发订餐app项目
  10. Java最全的设计模式之行为设计模式前六种