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;

最新文章

  1. todo
  2. java 读写properties (配置)文件
  3. 学习js回调函数
  4. SCOI2009粉刷匠
  5. JAVA开发错误总结(仅记录遇到的错误---后续不断更新......)
  6. category - junit用例分组执行
  7. 二、activity与Intent
  8. 静态/动态函数库设计,王明学learn
  9. PHP中去除字符串中的换行的方法
  10. 从Mac的Finder中访问你的iCloud文档
  11. python报错ordinal not in range(128)
  12. Android编程心得-ListView的Item高亮显示的办法
  13. PAT-乙级-1011. A+B和C (15)
  14. 手算平方根和基于 Java BigInteger 的大整数平方根的实现
  15. C语言 分支与循环 递推思想 穷举 流程的转移控制
  16. js实现简易版validate
  17. 树莓派中transmission的blocklist
  18. Vim 文件配置
  19. 08 正则表达式,Math类,Random,System类,BigInteger,BigDecimal,Date,DateFormat,Calendar
  20. 1.python进程、线程、多线程

热门文章

  1. shell 获取MySQL查询结果并处理
  2. Java 常见转义字符
  3. mysql数据库-备份与还原-Percona XtraBackup 2.4备份工具使用
  4. 备份分区,备份文件切割保存 dd
  5. VMware vRealize Suite 8.4 发布 - 多云环境的云计算管理解决方案
  6. 详细教程丨如何利用Rancher和Kong实现服务网格?
  7. 摄像头PVD和CVD薄膜
  8. H.265视频编码与技术全析(下)
  9. 马斯克如何颠覆航天? 1/5385成本,c++和python编程!
  10. Fine-Tuning微调原理