39、mysql数据库(视图)
39.1、视图:
0、创建表及插入数据:
1、创建teacher表及插入数据:
(1)创建表:
CREATE TABLE teacher(
tid int PRIMARY KEY auto_increment,
tname VARCHAR(20) not null
);
(2)插入数据:
insert into teacher(tid,tname) values(1,'张磊老师'),(2,'李平老师'),(3,'刘海燕老师'),(4,'朱云海老师'),(5,'李杰老师');
(3)查看数据:
2、创建course表及插入数据:
(1)创建表:
CREATE TABLE course(
cid INT PRIMARY KEY auto_increment,
cname VARCHAR(20) not null,
teacher_id INT,
FOREIGN KEY(teacher_id) REFERENCES teacher(tid)
);
(2)插入数据:
insert into course(cid,cname,teacher_id) values(1,'生物',1),(2,'物理',2),(3,'体育',3),(4,'美术',2);
(3)查看数据:
1、什么是视图:
视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】,
用户使用时只需使用【名称】即可获取结果集,可以将该结果集当做表来使用。使用视图我们可
以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重
写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中
的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦合,那就意味着扩展sql极为不便,
因此并不推荐使用。
例如查询李平老师教授的课程名的sql:
select cname from course where teacher_id = (select tid from teacher where tname='李平老师');
#子查询出临时表,作为teacher_id等判断依据
2、创建视图:
(1)语法:
CREATE VIEW 视图名称 AS SQL语句
(2)例子:
1)创建视图:
create view teacher_view as select tid from teacher where tname='李平老师';
2)于是查询李平老师教授的课程名的sql可以改写为:
select cname from course where teacher_id = (select tid from teacher_view);
(3)注意事项:
1)使用视图以后就无需每次都重写子查询的sql,但是这么效率并不高,还不如我们写子查询的效率高。
2)而且有一个致命的问题,视图是存放到数据库里的,如果我们程序中的sql过分依赖于数据库中存放
的视图,那么意味着,一旦sql需要修改且涉及到视图的部分,则必须去数据库中进行修改,而通常在公
司中数据库有专门的DBA负责,你要想完成修改,必须付出大量的沟通成本,DBA可能才会帮你完成修
改,极其地不方便。
3、使用视图:
(1)select * from course;
(2)创建表course的视图:
create view course_view as select * from course;
(3)查询视图:
select * from course_view;
(4)更新视图中的数据:
update course_view set cname='xxx' where cid=1;
(5)往视图中插入数据:
insert into course_view values(5,'yyy',2);
(6)发现原始表的记录也跟着修改了:
select * from course;
(7)注意:
我们不应该修改视图中的记录,而且在涉及多个表的情况下是根本无法修改视图中的记录的。
4、修改视图:
(1)语法:
ALTER VIEW 视图名称 AS SQL语句
(2)示例:
1)修改视图:
alter view teacher_view as select * from course where cid>3;
2)查看视图:
select * from teacher_view;
5、删除视图:
(1)语法:
DROP VIEW 视图名称
(2)示例:
1)查看数据库中有哪些视图:
SHOW FULL TABLES IN test WHERE TABLE_TYPE LIKE 'VIEW';
2)删除:
DROP VIEW teacher_view;
DROP VIEW course_view;
39、mysql数据库(视图)的更多相关文章
- mysql 数据库视图迁移
最近做一个项目,为了方便查询,建了好多的视图表,正式上线的时候需要把本地数据库迁移到服务器上. 按照常规方法: 1."导出sql","导入sql",发现视图没过 ...
- mysql数据库视图连接出现2003····错误
MySQL利用视图工具连接数据库时出现2003····错误 原因:MySQL的服务没有开启 解决步骤: ...
- mysql数据库----视图、触发器、存储过程、函数、事务、索引、其他语句
一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. SELECT * FROM ( S ...
- MySQL数据库----视图
视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时 ...
- 【Java】访问mysql数据库视图
数据库连接Connect: package cn.hkwl.zaxq.mysql; import java.sql.Connection; import java.sql.DriverManager; ...
- MySQL数据库视图(view),视图定义、创建视图、修改视图
原文链接:https://blog.csdn.net/moxigandashu/article/details/63254901
- MySQL数据库之视图
1 引言 为了简化复杂SQL语句编写,以及提高数据库安全性,MySQL数据库视图特性.视图是一张虚拟表,不在数据库中以储存的数据值形式存在.在开发中,开发者往往只对某些特定数据和所负责的特定任务感兴趣 ...
- MySQL 之 视图、触发器、存储过程、函数、事物与数据库锁
浏览目录: 1.视图 2.触发器 3.存储过程 4.函数 5.事物 6.数据库锁 7.数据库备份 1.视图 视图:是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据 视 ...
- MYSQL之视图、触发器、存储过程、函数、事物、数据库锁和数据库备份
一.视图 -- view 视图:是一个虚报表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据. 视图有如下特点: 1.视图的列可以来自不同的表,是表的抽象和逻辑意义上建立的新关系 ...
随机推荐
- Spark 集群安装部署
安装准备 Spark 集群和 Hadoop 类似,也是采用主从架构,Spark 中的主服务器进程就叫 Master(standalone 模式),从服务器进程叫 Worker Spark 集群规划如下 ...
- Https实践
https实践 常用端口 ssh 22 telnet 23 ftp 21 rsync 873 http 80 mysql 3306 redis 6379 https 443 dns 53 php 90 ...
- linux进阶之gitlab仓库搭建及免密使用
一.Gitlab简介 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务. 可通过Web界面进行访问公开的或者私人项目.它拥有与Github类 ...
- shell基础之99乘法表
方法一: 1 #!/bin/bash 2 for a in {1..9};do 3 for b in {1..9};do 4 c=`echo "$a*$b" |bc` 5 if [ ...
- Java Stream 流(JDK 8 新特性)
什么是 Steam Java 8 中新增了 Stream(流)来简化集合类的使用,Stream 本质上是个接口,接口中定义了很多对 Stream 对象的操作. 我们知道,Java 中 List 和 S ...
- Django基本文件配置
1.setting.py (1) ALLOWED_HOSTS = ['*'] (2) INSTALLED_APPS = ['app_name'] (3) TEMPLATES 中的 'DIRS': ...
- .NET Core Web API使用HttpClient提交文件的二进制流(multipart/form-data内容类型)
需求背景: 在需要通过服务端请求传递文件二进制文件流数据到相关的服务端保存时,如对接第三方接口很多情况下都会提供一个上传文件的接口,但是当你直接通过前端Ajax的方式将文件流上传到对方提供的接口的时候 ...
- CAP 5.1 版本发布通告 - 你期待的 Redis 来了
前言 今天,我们很高兴宣布 CAP 发布 5.1 版本正式版,在这个版本里我们同样引入了更多令人激动的新特性和改进,同时也得到越来越多人的喜爱. 得益于社区的反馈和贡献者的支持,在过去的两个月里,我们 ...
- Xilinx FPGA全局介绍
Xilinx FPGA全局介绍 现场可编程门阵列 (FPGA) 具有诸多特性,无论是单独使用,抑或采用多样化架构,皆可作为宝贵的计算资产:许多设计人员并不熟悉 FPGA,亦不清楚如何将这类器件整合到设 ...
- 3D车道线检测:Gen-LaneNet
3D车道线检测:Gen-LaneNet Gen-LaneNet: A Generalized and Scalable Approach for 3D Lane Detection 论文链接:http ...