mysql高级进阶----视图

大家好,我是天空之城。

视图是一个虚拟表(可理解为报表),其内容由select查询语句定义。和真实的表一样,视图也包含行和列,对视图的操作与对表的操作基本一致。视图中的数据是在使用视图时动态生成,视图中的数据都存储在基表中。
将sql封装成视图,简化了复杂的查询,更容易理解。
可读性
重用性
安全性
mysql高级进阶----视图_第1张图片
视图是一个虚拟表,其内容由select查询语句定义。和真实的表一样,视图也包含行和列,对视图的操作与对表的操作基本一致。 视图中的数据是在使用视图时动态生成,视图中的数据都存储在基表中。视图表的数据变化会影响到基表,基表的数据变化也会影响视图表(基于单张表而言)。

#创建视图
CREATE VIEW view_ name AS SELECT..:
#修改视图
ALTER VIEW view_ name AS SELECT...
#查看视图创建语句
SHOW CREATE VIEW view_ name;
#查看有哪些视图
SHOW TABLE STATUS WHERE comment= 'view';
#删除视图
DROP VIEW view_ name;

进入数据库
建表
drop table if exists score;
drop table if exists student;

create table student(
	stu_no varchar(20) not null primary key comment '学号',
	name varchar(30) comment '姓名',
	address varchar(150) comment '地址'
);

insert into student(stu_no, name, address) values('2016001', '张三', '贵州贵阳');
insert into student(stu_no, name, address) values('2016002', '李芳', '陕西兴平');
insert into student(stu_no, name, address) values('2016003', '张晓燕', '江西南昌');

create table score(
	id int not null auto_increment primary key,
	course varchar(50) comment '科目',
	stu_no varchar(20) comment '学号',
	score int comment '分数',
	foreign key(stu_no) references student(stu_no)
);

insert into score(course, stu_no, score) values('计算机', '2016001', 99);
insert into score(course, stu_no, score) values('离散数学', '2016001', 85);
insert into score(course, stu_no, score) values('计算机', '2016002', 78);

单表建立视图
creat view student_view as select * from student;
select  * from student_view;
+---------+--------+----------+
| stu_no  | name   | address  |
+---------+--------+----------+
| 2016001 | 张三   | 贵州贵阳 |
| 2016002 | 李芳   | 陕西兴平 |
| 2016003 | 张晓燕 | 江西南昌 |
+---------+--------+----------+
show table status where comment='view';
update student_view set name='张晓燕2' where stu_no='2016003';
select  * from student_view;
select  * from student;

update student set name='张晓燕' where stu_no='2016003';
select  * from student_view;
select  * from student;

建立表连接,通过学号连接
select A.*,B.course,B.score
from student A
left join score B on(A.stu_no=B.stu_no);
+---------+--------+----------+----------+-------+
| stu_no  | name   | address  | course   | score |
+---------+--------+----------+----------+-------+
| 2016001 | 张三   | 贵州贵阳 | 计算机   |    99 |
| 2016001 | 张三   | 贵州贵阳 | 离散数学 |    85 |
| 2016002 | 李芳   | 陕西兴平 | 计算机   |    78 |
| 2016003 | 张晓燕 | 江西南昌 | NULL     |  NULL |
+---------+--------+----------+----------+-------+



建立视图
create view stu_score_view as
select A.*,B.course,B.score
from student A
left join score B on(A.stu_no=B.stu_no);

mysql> select * from stu_score_view;
+---------+--------+----------+----------+-------+
| stu_no  | name   | address  | course   | score |
+---------+--------+----------+----------+-------+
| 2016001 | 张三   | 贵州贵阳 | 计算机   |    99 |
| 2016001 | 张三   | 贵州贵阳 | 离散数学 |    85 |
| 2016002 | 李芳   | 陕西兴平 | 计算机   |    78 |
| 2016003 | 张晓燕 | 江西南昌 | NULL     |  NULL |
+---------+--------+----------+----------+-------+
4 rows in set (0.00 sec)



你可能感兴趣的:(python,mysql,mysql,数据库)