视图:
1.视图是一张虚拟表,其结构和数据是基于对表的查询基础上。
视图中是没有数据的,其数据都来自于基本表!
2.特点:
(1)简化操作:将复杂查询定义为视图
(2)提高了数据的安全性:创建可控的环境,只能访问权限以内的数据,用户只能查询和修改显示的数据
(3)屏蔽数据库的复杂性:数据库管理员可以将难懂的列替换成用户易理解的
(4)数据及时更新
(5)便于数据共享
3.语法
create (or replace 【替换同名的】) view 图名 as select语句 with check option
视图中只能是一个select的完整语句!!!
mysql> create or replace view v_book
-> as
-> select 图书名称,价格,出版社 from 图书信息 where 出版社=1 or
出版社=3
->order by 出版社;
Query OK, 0 rows affected
mysql> select*from v_book;
+----------------------------+------+--------+
| 图书名称 | 价格 | 出版社 |
+----------------------------+------+--------+
| 网页美化与布局 | 39 | 1 |
| 计算机基础教程 | 45 | 1 |
| 计算机教程 | 45 | 1 |
| 实用工具软件任务驱动式教程 | 26 | 3 |
| MYSQL基础教学 | 30 | 3 |
+----------------------------+------+--------+
5 rows in set
mysql> desc v_book;
+----------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| 图书名称 | varchar(100) | NO | | NULL | |
| 价格 | decimal(10,0) | NO | | NULL | |
| 出版社 | varchar(4) | NO | | NULL | |
+----------+---------------+------+-----+---------+-------+
3 rows in set
重新命名:
mysql> create or replace view v_book1(bname,price,press)
-> as
-> select 图书名称,价格,出版社 from 图书信息
->where 出版社=1 and 出版社=3
->order by 出版社;
Query OK, 0 rows affected
mysql> desc v_book1;
+-------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| bname | varchar(100) | NO | | NULL | |
| price | decimal(10,0) | NO | | NULL | |
| press | varchar(4) | NO | | NULL | |
+-------+---------------+------+-----+---------+-------+
3 rows in set
多表的连接
mysql> create or replace view v_book2
-> as
-> select a.图书名称,b.出版社名称,c.图书类型名称 from 图书信息 a
-> join 出版社 b
-> on a.出版社=b.出版社ID
-> join 图书类型2 c
-> on a.图书类型=c.图书类型代号;
Query OK, 0 rows affected
mysql> select*from v_book2;
+---------------------------------+----------------+------------------+
| 图书名称 | 出版社名称 | 图书类型名称 |
+---------------------------------+----------------+------------------+
| oracle11g数据库应用、设计与管理 | 电子工业出版社 | 工业技术 |
| 实用工具软件任务驱动式教程 | 清华大学出版社 | 工业技术 |
| 网页美化与布局 | 高等教育出版社 | 工业技术 |
| 跨平台的移动Web开发实战 | 人民邮电出版社 | 工业技术 |
| 数据库应用基础实例教程 | 电子工业出版社 | 工业技术 |
| JAVA编程教学 | 机械工业出版社 | 工业技术 |
| MYSQL基础教学 | 清华大学出版社 | 工业技术 |
| 计算机基础教程 | 高等教育出版社 | 农业技术(科学) |
| 网络技术与应用 | 电子工业出版社 | 期刊杂志 |
+---------------------------------+----------------+------------------+
9 rows in set.
视图的修改:
1.必须保证视图的可更新性:
直接向视图中插入无效
mysql> insert into v_book values ("数据库系统原理",45.5,4);
1423 - Field of view 'book.v_book' underlying table doesn't have a default value
最少包含原始基表中非空的列!!!
当有多个表连接的视图时,不能向该视图中插入数据,以免影响多张基础表!!!
mysql> create or replace view v_book5
-> as
-> select*from 图书信息 where 价格>30
;
Query OK, 0 rows affected
mysql> update v_book5 set 价格=50
where 图书名称='计算机基础';
Query OK, 1 row affected
Rows matched: 1 Changed: 1 Warnings: 0
with check option:
是用来检查where语句的,要保证原有的条件满足:
价格=30 不满足条件“select*from 图书信息 where 价格>30”
mysql> create or replace view v_book5
-> as
-> select*from 图书信息 where 价格>30
-> with check option;
Query OK, 0 rows affected
mysql> update v_book5 set 价格=30 where 图书名称='计算机基础';
1369 - CHECK OPTION failed 'book.v_book5'
mysql> update v_book5 set 价格=50
where 图书名称='计算机基础';
Query OK, 0 rows affected
Rows matched: 1 Changed: 0 Warnings: 0
mysql> select*from v_book5;
+----------------+---------------------------------+--------+------+--------+------------+----------+----------+----------+
| ISBN编号 | 图书名称 | 作者 | 价格 | 出版社 | 出版日期 | 图书类型 | 封面图片 | 图书简介 |
+----------------+---------------------------------+--------+------+--------+------------+----------+----------+----------+
| 97871212041478 | oracle11g数据库应用、设计与管理 | 陈承欢 | 38 | 4 | 2014-07-01 | T | NULL | NULL |
| 9787040393293 | 网页美化与布局 | 陈承欢 | 39 | 1 | 2015-08-01 | T | NULL | NULL |
| 9787121052348 | JAVA编程教学 | 赵天逸 | 33 | 5 | 2008-12-29 | T | NULL | NULL |
| 9787121052350 | 计算机基础教程 | 赵天宇 | 45 | 1 | 2000-12-29 | S | NULL | NULL |
| 9787121052352## 标题 | 网络技术与应用 | 张泽段 | 100 | 4 | 2020-11-11 | M | NULL | NULL |
| 9787121052351 | 计算机基础 | 赵天宇 | 50 | 5 | 2000-12-29 | | NULL | NULL |
| 9787121052358 | 计算机教程 | 马宇 | 45 | 1 | 2000-12-29 | | NULL | NULL |
+----------------+---------------------------------+--------+------+--------+------------+----------+----------+----------+
7 rows in set
删除视图数据:
delete from . . . . .
删除的是只满足存在于视图中的
mysql> select*from v_book;
+----------------------------+------+--------+
| 图书名称 | 价格 | 出版社 |
+----------------------------+------+--------+
| 网页美化与布局 | 39 | 1 |
| 计算机基础教程 | 45 | 1 |
| 计算机教程 | 45 | 1 |
| 实用工具软件任务驱动式教程 | 26 | 3 |
| MYSQL基础教学 | 30 | 3 |
+----------------------------+------+--------+
5 rows in set
mysql> delete from v_book where 价格=45;
Query OK, 2 rows affected
mysql> select*from v_book;
+----------------------------+------+--------+
| 图书名称 | 价格 | 出版社 |
+----------------------------+------+--------+
| 网页美化与布局 | 39 | 1 |
| 实用工具软件任务驱动式教程 | 26 | 3 |
| MYSQL基础教学 | 30 | 3 |
+----------------------------+------+--------+
3 rows in set
修改视图:
alter <视图名称> view <图名 >as <select语句> with check option
不如去重写!!!!
删除视图:
drop view <视图名称>,…