1、什么是视图

视图是一个虚表。视图可以进行查询、增加、修改、删除。进行修改、增加、删除,将影响基本表中的数据。

2、视图相对基本表的优势

1》简单化:看到的就是想要的字段列,可以简化后续查询。

2》安全性:通过视图用户只能查询和修改他们所能看到的数据。

3》逻辑数据独立性:屏蔽基本表结构变化带来的影响。

3、创建视图

//1、algorithm表示视图选择的算法,undefined表示MySQL自动选择算法;merge表示将使用的视
//图语句与视图定义合并起来,使得视图定义的某一部分取代语句对应的部分;temptable表示将
//视图的结果存入临时表,然后用临时表来执行语句。
//2、[with [cascaded | local] check option]表示视图在更新时保证在视图的权限范围之内
//cascaded与local为可选参数,cascaded为默认值,表示更新视图时要满足所有相关视图和表
//的条件;local表示更新视图时满足该视图本身定义的条件即可。
//3、创建的视图默认属于当前数据库,如果要创建属于其他数据库的视图,则db_name.view_name
create [or replace] [algorithm = {undefined | merge | temptable}]
view view_name [(column_list)]
as select_statement
[with [cascaded | local] check option]

1》在单表上创建视图,可以给视图指定不同的字段名,创建的时候会与基本表对齐。

mysql> create view v_test as select * from test;
Query OK, 0 rows affected (0.00 sec) mysql> select * from v_test;
+----+-------+--------+--------+----------+------+
| id | name | deptId | salary | t_time | str |
+----+-------+--------+--------+----------+------+
| 1 | Lucy | NULL | 1000 | 10:28:33 | NULL |
| 2 | Lura | NULL | 1200 | 10:28:33 | NULL |
| 3 | Kevin | NULL | 1500 | 10:28:33 | NULL |
| 4 | Nancy | NULL | 1000 | 22:08:38 | NULL |
| 5 | Bob | NULL | 1200 | 22:08:38 | NULL |
+----+-------+--------+--------+----------+------+
5 rows in set (0.01 sec) mysql> desc v_test;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(10) | NO | | 0 | |
| name | varchar(25) | NO | | NULL | |
| deptId | int(11) | YES | | NULL | |
| salary | float | YES | | NULL | |
| t_time | time | YES | | NULL | |
| str | varchar(4) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec) mysql> desc test;
+--------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| name | varchar(25) | NO | | NULL | |
| deptId | int(11) | YES | | NULL | |
| salary | float | YES | | NULL | |
| t_time | time | YES | | NULL | |
| str | varchar(4) | YES | | NULL | |
+--------+-------------+------+-----+---------+----------------+
6 rows in set (0.00 sec) mysql>

2》在多表上创建视图,基本同单表的操作。

3》查看视图:权限show view;方法有describe、show table status、show create view、views表中查询视图信息。

1>describe / desc

describe / desc view_name;

2>show table status

show table status like 'view_name';

3>show create view

show create view view_name;

4>views表中查询视图信息

select * from information_schema.views;
mysql> select * from information_schema.views where table_name='v_test' \G
*************************** 1. row ***************************
TABLE_CATALOG: def
TABLE_SCHEMA: mybatis
TABLE_NAME: v_test
VIEW_DEFINITION: select `mybatis`.`test`.`id` AS `id`,`mybatis`.`test`.`nam
e` AS `name`,`mybatis`.`test`.`deptId` AS `deptId`,`mybatis`.`test`.`salary` AS
`salary`,`mybatis`.`test`.`t_time` AS `t_time`,`mybatis`.`test`.`str` AS `str` f
rom `mybatis`.`test`
CHECK_OPTION: NONE
IS_UPDATABLE: YES
DEFINER: root@localhost
SECURITY_TYPE: DEFINER
CHARACTER_SET_CLIENT: gbk
COLLATION_CONNECTION: gbk_chinese_ci
1 row in set (0.00 sec) mysql>

4、修改视图,两种方式

1》create or replace view

//与创建视图的语句格式一致
create [or replace] [algorithm ={undefined | merge | temptable}]
view view_name [(column_list)]
as select_statement
[with [cascaded | local] check option]

2》使用alter语句修改

alter [algorithm ={undefined | merge | temptable}]
view view_name [(column_list)]
as select_statement
[with [cascaded | local] check option]

5、更新视图

1》insert

insert into view_name ...

2》delete

delete from view_name ...

3》update

update view_name set ...

当视图包含如下内容时,视图的更新操作将不能被执行:

1>>视图中不包含基表中被定义为非空的列。

2>>在定义视图的select语句后的字段列表中使用使用了数学表达式。

3>>在定义视图的select语句后的字段列表中使用聚合函数。

4>>在定义视图的select语句中使用了distict、union、top、group by或having子句。

6、删除视图

drop view [if exists]
view_name [,view_name] ...
[restrict | cascade]

MySQL-快速入门(9)视图的更多相关文章

  1. MySql基础笔记(一)Mysql快速入门

    Mysql快速入门 一)基本概念 1)表 行被称为记录,是组织数据的单位.列被称为字段,每一列表示记录的一个属性. 2)主键 主键用于唯一的标识表中的每一条记录.可以定义表中的一列或者多列为主键, 但 ...

  2. MySQL 快速入门教程

    转:MySQL快速 入门教程 目录 一.MySQL的相关概念介绍 二.Windows下MySQL的配置 配置步骤 MySQL服务的启动.停止与卸载 三.MySQL脚本的基本组成 四.MySQL中的数据 ...

  3. MySQL 快速入门(一)

    目录 MySQL快速入门 简介 存储数据的演变过程 数据库分类 概念介绍 MySQL安装 MySQL命令初始 环境变量配置 MySQL环境变量配置 修改配置文件 设置新密码 忘记密码的情况 基本sql ...

  4. MySQL快速入门(二)

    目录 MySQL快速入门(二) 约束条件 自增 自增的特性 主键 外键 级联更新/删除 表与表之间的关系 外键约束 操作表方法 查询关键字 练习数据 select··from where 筛选 gro ...

  5. SQL快速入门 ( MySQL快速入门, MySQL参考, MySQL快速回顾 )

    SQL 先说点废话,很久没发文了,整理了下自己当时入门 SQL 的笔记,无论用于入门,回顾,参考查询,应该都是有一定价值的,可以按照目录各取所需.SQL数据库有很多,MySQL是一种,本文基本都是SQ ...

  6. Mysql快速入门(看完这篇能够满足80%的日常开发)

    这是一篇mysql的学习笔记,整理结合了网上搜索的教程以及自己看的视频教程,看完这篇能够满足80%的日常开发了. 菜鸟教程:https://www.runoob.com/mysql/mysql-tut ...

  7. 阿里云RDS for MySQL 快速入门——笔记

    1初始化配置 1.1设置白名单 创建RDS实例后,需要设置RDS实例的白名单,以允许外部设备访问该RDS实例.默认的白名单只包含默认IP地址127.0.0.1,表示任何设备均无法访问该RDS实例. 设 ...

  8. MySQL快速入门及常用命令

    数据库 笔记内容 SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL. 1. 数据查询语言DQL 数据查询语言DQL基本结构是由SELECT子句,F ...

  9. Mysql快速入门(三)

    MySQL性能优化之查看执行计划explain 介绍: (1).MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发 ...

  10. mysql快速入门

    一.下载并解压 $ wget http://cdn.mysql.com/Downloads/MySQL-5.5/MySQL-5.5.42-1.el6.x86_64.rpm-bundle.tar 解压后 ...

随机推荐

  1. 消息中间件--kafka(1)安装部署

    一.概念 1.什么是kafka Kafka是由Apache软件基金会开发的一个开源的分布式流处理平台,由LinkedIn公司开发,使用 Scala和Java编写.Kafka是一个分布式.分区的.多副本 ...

  2. C++ Arrays, std::array, std::vector 总结

    原文来自: https://shendrick.net/Coding%20Tips/2015/03/15/cpparrayvsvector.html @Seth Hendrick Original a ...

  3. 装sqlserver2005驱动解决firedac连接sql2000问题

    装了sqlserver2005驱动, 系统里装的sqlserver2012也能连上sql2000了. 当然firedac连sql2000也没问题了.设置个ODBCAdvanced为SQL Native ...

  4. [转] C++ 的关键字(保留字)完整介绍

    转载至:https://www.runoob.com/w3cnote/cpp-keyword-intro.html 1. asm asm (指令字符串):允许在 C++ 程序中嵌入汇编代码. 2. a ...

  5. 【bzoj2763】[JLOI2011]飞行路线

    *题目描述: Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一 ...

  6. Python模块之-OS模块

    一.os模块概述 Python os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.(一语中的) 二.常用方法 1.os.name 输出字符串指示正在使用的平台 ...

  7. codeforces#403—B题(二分,三分)

    B. The Meeting Place Cannot Be Changed time limit per test 5 seconds memory limit per test 256 megab ...

  8. SWPUCTF2019 | Network

    这题真的就靠百度的,第一次接触TTL型的misc,直接拿了一个大佬的脚本,改了一丢丢: with open('t.txt') as f: lines = f.readlines() n_num = [ ...

  9. [CSP-S模拟测试]:666(模拟)

    题目描述 不忘初心. 小$\pi$假期在家无聊,打开了某弹幕直播网站. 突然,有一个精彩的镜头. 小$\pi$看到了满屏的$6$,其中,有$666$.也有$666666$.也有$6666666666. ...

  10. [LeetCode]-DataBase-Department Highest Salary

    The Employee table holds all employees. Every employee has an Id, a salary, and there is also a colu ...