Mysql数据库(六)视图
一、视图是由数据库中的一个表或多个表导出的虚拟表。其作用是方便用户对数据的操作。
1.视图的概念
2.视图的作用
二、创建视图
创建视图是指在已经存在的数据表上建立视图。视图可以建立在一张表中,也可以建立在多张表中。
1.查看创建视图的权限
mysql> SELECT Select_priv,Create_view_priv FROM mysql.user WHERE user='root';
+-------------+------------------+
| Select_priv | Create_view_priv |
+-------------+------------------+
| Y | Y |
+-------------+------------------+
1 row in set (0.01 sec)
结果中两列的值都为Y,这表明root用户具有Select(查看)和Create_view(创建视图)的权限。
2.创建视图
mysql> SELECT * FROM tb_bookinfo;
+----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+
| barcode | bookname | typeid | author | ISBN | price | page | bookcase | inTime | del | id |
+----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+
| 17120107 | Java King | 3 | LianJiang | 115 | 49.80 | 350 | 1 | 2018-04-17 | 0 | 1 |
| 17120108 | Lian | 1 | QiaoJiang | 116 | 50.00 | 351 | 2 | 2018-04-18 | 0 | 2 |
| 17120109 | Tian King | 2 | TianJiang | 117 | 51.10 | 352 | 3 | 2018-04-19 | 0 | 3 |
+----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+
3 rows in set (0.00 sec) mysql> SELECT * FROM tb_borrow;
+----+----------+--------+------------+------------+----------+--------+
| id | readerid | bookid | borrowTime | backTime | operator | ifback |
+----+----------+--------+------------+------------+----------+--------+
| 1 | 1 | 1 | 2018-04-17 | 2018-04-20 | mr | 1 |
| 2 | 1 | 2 | 2018-04-16 | 2018-04-21 | mr | 0 |
+----+----------+--------+------------+------------+----------+--------+
2 rows in set (0.00 sec) mysql> CREATE VIEW
-> v_book(barcode,bookname,author,price,bookcase,borrowTime,backTime)
-> AS SELECT barcode,bookname,author,price,bookcase,borrowTime,backTime
-> FROM tb_bookinfo AS b,tb_borrow AS t WHERE b.typeid=t.id;
Query OK, 0 rows affected (0.53 sec) mysql> SELECT * FROM v_book;
+----------+-----------+-----------+-------+----------+------------+------------+
| barcode | bookname | author | price | bookcase | borrowTime | backTime |
+----------+-----------+-----------+-------+----------+------------+------------+
| 17120108 | Lian | QiaoJiang | 50.00 | 2 | 2018-04-17 | 2018-04-20 |
| 17120109 | Tian King | TianJiang | 51.10 | 3 | 2018-04-16 | 2018-04-21 |
+----------+-----------+-----------+-------+----------+------------+------------+
2 rows in set (0.00 sec)
3.创建视图的注意事项
三、视图操作
1.查看视图
(1)DESCRIBE语句
mysql> DESC v_book;
+------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------+-------+
| barcode | varchar(30) | YES | | NULL | |
| bookname | varchar(70) | YES | | NULL | |
| author | varchar(30) | YES | | NULL | |
| price | float(8,2) | YES | | NULL | |
| bookcase | int(10) unsigned | YES | | NULL | |
| borrowTime | date | YES | | NULL | |
| backTime | date | YES | | NULL | |
+------------+------------------+------+-----+---------+-------+
7 rows in set (0.00 sec)
(2)SHOW TABLE STATUS语句查看视图的信息,这里说明视图为虚拟表,与普通表是有区别的。
mysql> SHOW TABLE STATUS LIKE 'v_book'\G
*************************** 1. row ***************************
Name: v_book
Engine: NULL
Version: NULL
Row_format: NULL
Rows: NULL
Avg_row_length: NULL
Data_length: NULL
Max_data_length: NULL
Index_length: NULL
Data_free: NULL
Auto_increment: NULL
Create_time: NULL
Update_time: NULL
Check_time: NULL
Collation: NULL
Checksum: NULL
Create_options: NULL
Comment: VIEW
1 row in set (0.00 sec) mysql> SHOW TABLE STATUS LIKE 'tb_bookinfo'\G
*************************** 1. row ***************************
Name: tb_bookinfo
Engine: InnoDB
Version: 10
Row_format: Dynamic
Rows: 3
Avg_row_length: 5461
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 0
Auto_increment: NULL
Create_time: 2018-04-17 15:17:13
Update_time: 2018-04-17 16:51:30
Check_time: NULL
Collation: latin1_swedish_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
(3)SHOW CREATE VIEW语句查看视图的详细定义
mysql> SHOW CREATE VIEW v_book\G
*************************** 1. row ***************************
View: v_book
Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_book` AS select `b`.`barcode` AS `barcode`,`b`.`bookname` AS `bookname`,`b`.`author` AS `author`,`b`.`price` AS `price`,`b`.`bookcase` AS `bookcase`,`t`.`borrowTime` AS `borrowTime`,`t`.`backTime` AS `backTime` from (`tb_bookinfo` `b` join `tb_borrow` `t`) where (`b`.`typeid` = `t`.`id`)
character_set_client: gbk
collation_connection: gbk_chinese_ci
1 row in set (0.00 sec)
2.修改视图
修改视图是指修改数据库中已存在的表的定义。当基本表的某些字段发生变化时,可以通过修改视图来保持视图和基本表之间一致。
(1)CREATE OR REPLACE VIEW语句在视图已经存在的情况下,对视图进行修改;视图不存在时,可以创建视图。
mysql> CREATE OR REPLACE VIEW
-> v_book(barcode,bookname,borrowTime,backTime)
-> AS SELECT barcode,bookname,borrowTime,backTime
-> FROM tb_bookinfo AS b,tb_borrow AS t WHERE b.typeid=t.id;
Query OK, 0 rows affected (0.01 sec) mysql> DESC v_book;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| barcode | varchar(30) | YES | | NULL | |
| bookname | varchar(70) | YES | | NULL | |
| borrowTime | date | YES | | NULL | |
| backTime | date | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
(2)ALTER VIEW语句改变了视图的定义,包括被索引视图,但不影响所依赖的存储过程或触发器。
mysql> ALTER VIEW
-> v_book(barcode,borrowTime,backTime)
-> AS SELECT barcode,borrowTime,backTime
-> FROM tb_bookinfo AS b,tb_borrow AS t WHERE b.typeid=t.id
-> WITH CHECK OPTION;
Query OK, 0 rows affected (0.00 sec) mysql> DESC v_book;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| barcode | varchar(30) | YES | | NULL | |
| borrowTime | date | YES | | NULL | |
| backTime | date | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
3.更新视图
对视图的更新其实就是对表的更新,更新视图是通过视图来插入、更新和删除表中的数据。因为视图是一个虚拟表,其中没有数据,通过视图更新时,都是转换到基本表来更新。更新视图时,只能更新权限范围内的数据,超出了范围,就不能更新。
(1)更新视图,同时也把原来的表更新了
mysql> SELECT * FROM v_book;
+----------+------------+------------+
| barcode | borrowTime | backTime |
+----------+------------+------------+
| 17120108 | 2018-04-17 | 2018-04-20 |
| 17120109 | 2018-04-16 | 2018-04-21 |
+----------+------------+------------+
2 rows in set (0.00 sec) mysql> UPDATE v_book SET borrowTime='2018-04-19' WHERE barcode='17120108';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0 mysql> SELECT * FROM v_book;
+----------+------------+------------+
| barcode | borrowTime | backTime |
+----------+------------+------------+
| 17120108 | 2018-04-19 | 2018-04-20 |
| 17120109 | 2018-04-16 | 2018-04-21 |
+----------+------------+------------+
2 rows in set (0.00 sec) mysql> SELECT * FROM tb_borrow;
+----+----------+--------+------------+------------+----------+--------+
| id | readerid | bookid | borrowTime | backTime | operator | ifback |
+----+----------+--------+------------+------------+----------+--------+
| 1 | 1 | 1 | 2018-04-19 | 2018-04-20 | mr | 1 |
| 2 | 1 | 2 | 2018-04-16 | 2018-04-21 | mr | 0 |
+----+----------+--------+------------+------------+----------+--------+
2 rows in set (0.00 sec)
(2)更新视图的限制
a.视图中包含COUNT()、SUM()、MAX()、MIN()等函数
b.视图中包含UNION、UNION ALL、DISTINCT、GROUP BY和HAVIG等关键字
c.常量视图
d.视图中的SELECT中包含子查询
f.由不可更新的视图导出的视图
g.创建视图时,ALGORITHM为TEMPTABLE类型
h.视图对应的表上存在没有默认值的列,而且该列没有包含在视图里。
4.删除视图
mysql> DROP VIEW IF EXISTS v_book;
Query OK, 0 rows affected (0.00 sec) mysql> SELECT * FROM v_book;
ERROR 1146 (42S02): Table 'db_library.v_book' doesn't exist
Mysql数据库(六)视图的更多相关文章
- MySQL数据库之视图
1 引言 为了简化复杂SQL语句编写,以及提高数据库安全性,MySQL数据库视图特性.视图是一张虚拟表,不在数据库中以储存的数据值形式存在.在开发中,开发者往往只对某些特定数据和所负责的特定任务感兴趣 ...
- Navicat工具导出mySQL数据库某个视图结构的.sql脚本
用Navicat工具怎么都导不出来mySQL数据库的某个视图.sql脚本,即使导出来也只是包含视图记录,不包含视图结构.经过一番研究,终于克服,操作如下: 1.在某个数据库中,新建备份,如下图 2.选 ...
- MySQL数据库创建视图
视图可以说是一种虚拟表,建立在基本表的基础上,通过关联一个表或者多个表来获取多个表中需要的字段,视图只是用来查询数据并不能用来存储数据信息. 我有以下几张表: -------image表---- -- ...
- mysql数据库之视图、触发器
视图 概念:通过查询得到的一张虚拟表,然后保存下来就是视图 视图的好处:如果要频繁使用某张虚拟表,那么就可以保存为视图,以后查找就直接拿这个视图就会非常方便 视图语法规则: create view t ...
- 39、mysql数据库(视图)
39.1.视图: 0.创建表及插入数据: 1.创建teacher表及插入数据: (1)创建表: CREATE TABLE teacher( tid int PRIMARY KEY auto_incre ...
- spring boot使用jpa查询mysql数据库的视图时不报错,但查询结果数据总是重复第一条
问题描述: 在数据库里查询到的结果是正常显示的 在程序中返回的结果: 解决方法: 添加行号作为主键: 解决! 我明明是前端啊前端,为啥在搞后台....,总感觉我要在向全栈进发,希望自己有朝一日真的能成 ...
- MySql学习(六) —— 数据库优化理论(二) —— 查询优化技术
逻辑查询优化包括的技术 1)子查询优化 2)视图重写 3)等价谓词重写 4)条件简化 5)外连接消除 6)嵌套连接消除 7)连接消除 8)语义优化 9)非SPJ优化 一.子查询优化 1. ...
- mysql数据库之 存储引擎、事务、视图、触发器、存储过程、函数、流程控制、数据库备份
目录 一.存储引擎 1.什么是存储引擎? 2.mysql支持的存储引擎 3. 使用存储引擎 二.事务 三.视图 1.什么是视图 2.为什么要用视图 3.如何用视图 四.触发器 为何要用触发器 创建触发 ...
- mysql 数据库视图迁移
最近做一个项目,为了方便查询,建了好多的视图表,正式上线的时候需要把本地数据库迁移到服务器上. 按照常规方法: 1."导出sql","导入sql",发现视图没过 ...
- MYSQL数据库学习十六 安全性机制
16.1 MYSQL数据库所提供的权限 16.1.1 系统表 mysql.user 1. 用户字段 Host:主机名: User:用户名: Password:密码. 2. 权限字段 以“_priv”字 ...
随机推荐
- 网关鉴权后下游统一filter获取用户信息
1. 场景描述 最近有点忙,在弄微服务nacos+springcloud gateway这块工作,以前只是简单应用,这次因为要对接10几个系统或者平台,还的鉴权,等后续稍微闲点了,把这块东西总结下. ...
- linux mint安装ffmpge
sudo add-apt-repository ppa:mc3man/trusty-media sudo apt-get update sudo apt-get install ffmpeg
- SOFAJRaft—初次使用
SOFAJRaft-初次使用 SOFAJRaft 是基于 Raft 算法的生产级高性能 Java 实现,支持 MULTI-RAFT-GROUP.应用场景有 Leader 选举.分布式锁服务.高可靠的元 ...
- Shell之Test命令
目录 Shell之Test命令 参考 Test简介 Test语法 表达式之逻辑运算 表达式之字符串判断 表达式之整数判断 表达式之文件判断 Shell之Test命令
- 如何安装PHPstorm并配置php运行环境运行php项
php是程序开发者常用的编程语言,那么它就需要一款简单实用的集成开发环境,也就是一款舒服的编辑器,今天笔者为大家介绍phpstorm这款软件,并详细的讲解如何用它配置php项目 工具/原料 笔 ...
- 二次编码 深浅拷贝 is和==
1.二次编码 ascii 不支持中文 gbk 支持中文 2个字节 包含ascii Unicode 万国码 python3 内存Unicode utf-8 可变的长度 英文 1字节 欧洲2个字节 亚洲3 ...
- 【windows】远程桌面 把远程服务器的explorer.exe进程关掉了,咋办?
在操作windows2008R2服务器时不小心把explorer.exe进程关闭了,瞬间整个界面就蓝色了. 重启,做不到,各种快捷键用不了,最后发现Alt+Tab可以用,刚好打开了IIS, 打开其中一 ...
- 记录 java 安卓 各类引用包报错处理方法 例如 android.support.v4.app.+ ,io.reactivex.+
可能导致的原因: 1. 引用包不存在(存在也报错就是 版本不对) 2.有资源文件 重名,报错之类的问题 3. 别人提交了资源文件或者配置文件(这是最常见的,特别是新手,我也是),后续遇到再加 解决方法 ...
- Redis之安装配置(Windows)
下载 下载地址:https://github.com/MSOpenTech/redis/releases 解压,文件的名字重命名为redis. 打开文件夹,内容如下: 发送redis-server.e ...
- Focus on the Good 专注于好的方面
[1] Dealing with people is like digging for gold. When you go digging for an ounce of gold, you hav ...