码迷,mamicode.com
首页 > 数据库 > 详细

sql——视图

时间:2018-11-26 16:12:57      阅读:276      评论:0      收藏:0      [点我收藏+]

标签:table   utf8   刘强东   一个   upd   lte   mysql   dem   values   

为什么使用视图

当我们在使用多表查询时, 我们的sql语句可能会非常的复杂,如果每次都编写一遍sql‘的话无疑是一件麻烦的事情,这时候就可以使用视图来避免多次编写sql的问题;

简答的说可以帮我们节省sql的编写,

视图的另一个作用是,可以不同的视图来展示开放不同数据的访问

例如,同一张工资表,老板可以查看全部,部门主管可以查看该部门所有人,员工只能看自己的一条记录。

使用方法

创建视图

CREATE [OR REPLACE] VIEW view_name [(column_list)]
AS select_statement

 加上or replace 时如果已经存在相同的视图则替换原有视图

column_list 指定那些字段要出现在视图中

注意:由于视图是一张虚拟表,视图中的数据实际来源其他表,所以视图中的数据不会出现在硬盘上。

使用视图

视图是一张虚拟表,所以使用正常的表没有任何区别

查看视图

1.desc view_name; 查看数据结构

2.show create view view_name; 查看创建语句

修改视图

alter view_name as select_statement

删除视图

drop view view_name

实例

#准备数据
create database db02 charset utf8;
use db02
create table student(
  s_id int(3),
  name varchar(20),
  math float,
  chinese float 
);
insert into student values(1,tom,80,70),(2,jack,80,80),(3,rose,60,75);
?
create table stu_info(
  s_id int(3),
  class varchar(50),
  addr varchar(100)
);
insert into stu_info values(1,二班,安徽),(2,二班,湖南),(3,三班,黑龙江);

 

创建视图

#创建视图包含 编号 学生的姓名 和班级
create view view_stu (学号,姓名,班级) as
select student.s_id,student.name,stu_info.class from student join stu_info on student.s_id = stu_info.s_id;

 

查看创建的视图
select * from view_stu;

案例2: 隔离数据

准备数据

create table salarys(
id int primary key,
name char(10),
salary double,
dept char(10)
);
insert into salarys values
(1,"刘强东",900000,"市场"),
(2,"马云",800090,"市场"),
(3,"李彦宏",989090,"财务"),
(4,"马化腾",87879999,"财务");

 

创建市场部专用的工资视图
create view view_shichang as
select * from salarys where dept = "市场";

 

查看视图
select * from view_shichang;

 

同时注意:对视图数据的insert update delete会同步到原表中,但是由于视图可能是部分字段,很多时候会失败。
修改原表中的数据,视图的数据会随之该表。这是建议修改数据的方式,不建议直接对视图中的数据进行修改。

mysql> select * from view_shichang;
+----+--------+--------+------+
| id | name | salary | dept |
+----+--------+--------+------+
| 1 | 刘强东 | 900000 | 市场 |
| 2 | 马云 | 800090 | 市场 |
+----+--------+--------+------+

update salarys set salary = 10000 where name = "刘强东";

 

mysql> select * from view_shichang;
+----+--------+--------+------+
| id | name | salary | dept |
+----+--------+--------+------+
| 1 | 刘强东 | 10000 | 市场 |
| 2 | 马云 | 800090 | 市场 |
+----+--------+--------+------+

总结:mysql可以分担程序中的部分逻辑,但这样一来后续的维护会变得更麻烦

如果需要改表结构,那意味着视图也需要相应的修改,没有直接在程序中修改sql来的方便

sql——视图

标签:table   utf8   刘强东   一个   upd   lte   mysql   dem   values   

原文地址:https://www.cnblogs.com/msj513/p/10020553.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!