【MySQL】数据处理(视图)

视图:

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 <视图名称>,…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骑着蜗牛ひ追导弹'

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值