MySQL-初识视图

mysql 视图

 假设现在有两张表,user和class,记录学生信息和班级。user表和class表结构如下:

-- table `user`
CREATE TABLE IF NOT EXISTS user (
    id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
    name VARCHAR(40) NOT NULL COMMENT '姓名',
    age TINYINT(3) UNSIGNED NOT NULL COMMENT '年龄',
    class_id BIGINT(20) UNSIGNED NOT NULL COMMENT '班级id',
    PRIMARY KEY(id)
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;

-- table `class`
CREATE TABLE IF NOT EXISTS class (
    id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
    number TINYINT(2) UNSIGNED NOT NULL COMMENT '班级号码',
    PRIMARY KEY(id)
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;

 数据如下:

-- 插入班级号码为1的班级记录
INSERT INTO class (id, number) VALUES (1, 1);

-- 插入姓名为Mike的学生,并关联班级记录
INSERT INTO user (id, name, age, class_id) VALUES (null, 'Mike', 18, 1);

 当我要查询id为1的用户姓名和班级号码时,通常查询方式如下:

SELECT user.id, name, number FROM user, class 
WHERE user.class_id=class.id AND user.id=1;

 感觉还好?那么再加一个表呢?现在再加上一张表,用来记录课程,如下:

-- table `lesson`
CREATE TABLE IF NOT EXISTS lesson (
    id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
    name VARCHAR(64) NOT NULL COMMENT '课程名称',
    PRIMARY KEY(id)
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;

-- 添加数据
INSERT INTO lesson (id, name) VALUES (null, '数据库系统概念');

-- 修改class表,添加字段记录课程id 
ALTER TABLE class ADD lesson_id BIGINT(20) UNSIGNED NOT NULL COMMENT '课程id';

-- 修改1班数据,关联课程
UPDATE class SET lesson_id=1 WHERE id=1;

 那么现在有三个表,我需要获得id为1的学生姓名、年龄、班级、课程等信息,查询语句如下:

SELECT user.id, user.name, age, number, lesson.name FROM user, class, lesson
WHERE user.class_id=class.id AND class.lesson_id=lesson.id AND user.id=1;

 又臭又长的语句~,作为查询的人,我必须知道各个表的结构才能查到我想要的数据,真是不友好。怎么办?使用视图(PS:注意,MySQL5 之后才提供了对视图的支持,使用时请注意数据库版本)。

视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。

 怎么使用,如下:

-- 创建视图
CREATE VIEW view_userinfo AS
SELECT user.id, user.name, age, number, lesson.name FROM user, class, lesson
WHERE user.class_id=class.id AND class.lesson_id=lesson.id;

-- 查询数据
SELECT * FROM view_userinfo;
SELECT * FROM view_userinfo WHERE id=1;

-- 修改数据
UPDATE view_userinfo SET name='Michael Jackson' WHERE id=1;

 很明显,使用视图之后,简化重用复杂的SQL语句,对于一些复杂但是常用的查询操作来说比较方便。并且可以保护数据,可以授予用户表特定部分的访问权限而不是整个表。

 可以将视图作为一张表来进行操作,如DML操作、过滤或排序数据、联结其他视图或者表等。但是还是存在一些限制。比DML操作,当视图的定义中有以下操作时,视图不允许跟新:

  • 分组(使用GROUP BY和HAVING)
  • 联结
  • 子查询
  • 聚集函数(Min()、Count()、Sum()等)
  • DISTINCT
  • 导出(计算)列

 另外,当以对多个表的查询定义视图时,可能会造成性能的下降。

 视图的常见操作,如下:

-- 创建视图
CREATE VIEW view_name AS ...

-- 查看创建视图
SHOW CREATE VIEW view_name;

-- 删除视图
DROP VIEW view_name;

-- 修改视图
CREATE OR REPLACE VIEW ...
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,099评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,828评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,540评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,848评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,971评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,132评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,193评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,934评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,376评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,687评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,846评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,537评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,175评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,887评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,134评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,674评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,741评论 2 351

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,266评论 0 9
  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 7,790评论 5 116
  • 香油加蒜泥加香菜,原来火锅蘸料这样子才是最好吃的。 从前我可是只吃麻汁料和海鲜料的。 上次在重庆吃火锅,我还是用自...
    九月的九月末阅读 324评论 0 0
  • ​不记得以前在哪里看过,生活是一道不尽人意的风景,你若停留不前只会身处窘境,你若起航才有可能看到日出日落,世间万景...
    绝de阿七阅读 514评论 0 5
  • 老师推荐: 初三生活,忙碌紧张而单一。一场雪翩然而至,一下子缓解了紧张的气氛,释放了学习的压力。 闫嘉禾同学写的就...
    清泉石上流的简书阅读 463评论 13 1