视图是对磁盘上保存的表数据的抽象,即抽取一个表或多个表的部分行或列的数据,展示给使用者。

  首先列举下MySQL中最简单的对视图操作的语法:

1、创建视图:

create view 视图名 as
select语句
例如:
create view v_fruit as
select name,place,weight from t_fruit
where weight<=12;

据我所知,“as”后面的语句肯定都是以“select”开头的,可以理解成视图的创建结果就是一张新的表格,表格里面有哪些东西呢,就是select语句的结果;另外这张新的“表格”的字段与“select”后面的名字对应,在上例中就是name,place,weight,但是也可以用as或省略as的别名形式,改变新“表格”的字段名,例如:

create view v_fruit as
select name myname,place as myplace,weight from t_fruit
where weight<=12;

这样,“新表格”的包含的所有字段名就是myname,myplace,weight

另外,指定视图的字段名可以不用在select后面加as的方法,直接在“视图名”后面加上“(字段1,字段2,...)”的方法,但是括号里面的个数必须跟实际select出来的字段个数一样

例如以下实现一样的字段名设定效果:

create view v_fruit(myname,myplace,weight) as
select name,place,weight from t_fruit
where weight<=12
with check option;

上面的视图是在一张表的基础上创建的,也可以根据多张表连接查询,或者根据其他的视图创建,即"from"后面可以跟表名,也可以跟视图名,但是千万不能跟子查询!

例如下面的写法是错的:

create view v as
select id,name,place from (select * from t_fruit)
where id>3;

当然,“where”后面跟上子查询是没有问题的。

2、使用视图:

  视图一旦创建,操作起来就跟表格一样,爱怎么玩就怎么玩,至少你往编辑器里面输语句,肯定不会报错。

  实际执行阶段就不一样了,对于select from的查询操作,肯定不会出任何问题;但是对于增、删、改,因为视图实际存储的只是定义,这三个操作会改动底下的实际的表格,而你看到的view,里面的数据可能来源于好几个表格,也有可能是通过和、平均数等计算得到的,一旦insert、delete或者update,改动就会特别复杂。为了保险起见,对于一些情况,增删改直接会被MySQL系统判定为误操作,无法成功。这里修改失败的情况特别多,只列举几个,比如改动涉及到两个或两个以上的表会失败,改动后not null的列没有值会失败,view的列值通过sum、count等计算得到的会失败。

  还有一个问题要注意,如果底下的table的字段发生变动,比如说字段被删除、重命名等,视图操作就很容易出现错误。因为视图在定义时,select后面的字段名就定死了,不会随着表格字段的变动而变动,即使是select *,也会把*直接替换为相应的固定字段。比如一个view里面本来关联了A,B,C三个字段,现在table把字段C重命名为D,那么view对C字段的使用就会出错。

3、修改视图:

  有两种方法,一种是常规的alter,另一种可以跟创建视图的共用

①alter方法,只需把创建时的create改成alter就行,比如:

alter view v_fruit as
select place as myplace,weight from t_fruit
where weight<=12;

②第1点创建视图里面漏了没说,实际上存在创建和修改视图可以共用的方法:create or replace,只要把create换成这3个单词,其他不要变

create or replace view v_fruit as
select place as myplace,weight from t_fruit
where weight<=12;

4、删除视图:

drop view 视图名;
或者
drop view 视图1,视图2,...

如果某个视图不存在,则会报错,但是其他存在的视图会被正常删除。

为了防止报错,可以加上“if exists”关键字

drop view if exists 视图名;

5、查看视图各字段的定义:

describe 视图名;
或者
desc 视图名;

更深层次分析未完待续。。。

MySQL学习笔记之视图的更多相关文章

  1. mysql学习笔记--数据库视图

    一.视图 1. 概念 a. 视图是一张虚拟表,它表示一张表的部分或多张表的综合的结构 b. 视图仅仅是表结构,没有数据.视图的结构和数据建立在表的基础上 2. 创建视图 a. 语法: create [ ...

  2. MySQL学习笔记一

    MySQL 学习笔记 一 一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系 ...

  3. MySQL学习笔记-数据库文件

    数据库文件 MySQL主要文件类型有如下几种 参数文件:my.cnf--MySQL实例启动的时候在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还介绍了参数类 ...

  4. MySQL学习笔记-MySQL体系结构总览

    MySQL体系结构总览 不管是用哪种数据库,了解数据库的体系结构都是极为重要的.MySQL体系结构主要由数据库和数据库实例构成. 数据库:物理操作系统文件或者其它文件的集合,在mysql中,数据库文件 ...

  5. 【mysql学习笔记整理】

    /*mysql学习笔记整理*/ /*常用的数据库操作对象*/ #库的操作#创建#数据库的创建USE mysql;CREATE DATABASE db_x;#删除#删除数据库DROP DATABASE ...

  6. 一千行MySQL学习笔记 (转)

    出处:  一千行MySQL学习笔记 /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权 ...

  7. mysql basic operation,mysql总结,对mysql经常使用语句的详细总结,MySQL学习笔记

    mysql> select * from wifi_data where dev_id like "0023-AABBCCCCBBAA" ; 1.显示数据库列表.show d ...

  8. Mysql学习笔记(三)对表数据的增删改查。

    正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...

  9. Mysql学习笔记(二)数据类型 补充

    原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与 ...

随机推荐

  1. C语言 经典编程100题

    一.题目 [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? =============================================== ...

  2. Vertica的date与timestamp数据类型,to_date()与to_timestamp()函数区别

    实验环境:3节点,RHEL6.4 + Vertica 7.0.1 实验目的:了解Vertica数据库的date与timestamp数据类型,to_date()与to_timestamp()函数区别   ...

  3. SQL Server 执行计划利用统计信息对数据行的预估原理以及SQL Server 2014中预估策略的改变

    前提  本文仅讨论SQL Server查询时, 对于非复合统计信息,也即每个字段的统计信息只包含当前列的数据分布的情况下, 在用多个字段进行组合查询的时候,如何根据统计信息去预估行数的. 利用不同字段 ...

  4. Mybatis - 动态sql

    learn from:http://www.mybatis.org/mybatis-3/dynamic-sql.html mybatis支持动态拼接sql语句.主要有: if choose (when ...

  5. Sublime Text 使用介绍、全套快捷键及插件推荐

    开篇:如果说Notepad++是一款不错Code神器,那么Sublime Text应当称得上是神器滴哥.Sublime Text最大的优点就是跨平台,Mac和Windows均可完美使用:其次是强大的插 ...

  6. Mac OS平台下应用程序安装包制作工具Packages的使用介绍

    一.介绍 Windows下面开发好的应用程序要进行分发时有很多打包工具可供选择,如Inno Setup, InstallShield, NSIS, Advanced Installer, Qt Ins ...

  7. Xamarin.Android之Spinner的简单探讨

    一.前言 今天用了一下Spinner这个控件,主要是结合官网的例子来用的,不过官网的是把数据写在Strings.xml中的, 某种程度上,不是很符合我们需要的,比较多的应该都是从数据库读出来,绑定上去 ...

  8. entity framework 5 批量增删改效率优化

    对于数据的批量增删改最慢的就是操作一条就提交一次事务. 以下是对增删改操作的优化测试 同样的300条数据 批量新增只提交一次事务 用时:10673.5444ms 批量新增只提交一次事务并把contex ...

  9. ios h5 app avalon tap点击事件失效及点击延迟300ms问题解决方法

    1.ios h5 app avalon tap事件失效 使用MUI制作app界面,使用avalon.js渲染数据,发现在(Android上正常)ios上运行时容器div的avalon的ms-on-ta ...

  10. centos安装禅道的步骤

    1.下载 XAMPP 套件: https://sourceforge.net/projects/xampp/files/XAMPP%20Linux/stats/timeline  下载的文件是 xam ...