MySQL视图
一、视图
1.1、视图概述
视图是从一个或者多个表里导出来的表,是一种虚拟存在的表;
其内容由查询定义,即视图中的数据不需要占用内存空间,而是仅仅保存了一条select语句;
行列数据都来自所引用的表,并随着基本表的变化而变化。使用原因:安全,易于理解和使用。
1.2、视图优势
增强数据安全性:给不同用户分配不同的视图,用户只能操作查看相对应的数据,无法看到数据表的结构,增强了数据安全访问控制。
提高灵活性,操作变简单:由于视图是一种虚拟表,用户可以自由的选择所需要的数据进行定义,操作灵活,简单。
提高数据的逻辑独立性:表结构和应用程序的变化,都可以通过重新定义视图或者修改视图定义来解决。
1.3、执行机制
当调用视图时,才会执行视图中的SQL语句,进行数据操作,视图和表的数据总是一样的。
二、视图定义和管理(以studentinfo为实验例子)
在学生管理系统中,有学生信息表studentinfo表,其表结构如下:
字段名 |
字段描述 |
数据类型 |
主键 |
外键 |
非空 |
唯一 |
自增 |
Number |
学号 |
INT(4) |
是 |
否 |
是 |
是 |
否 |
Name |
姓名 |
VARCHAR(20) |
否 |
否 |
是 |
否 |
否 |
Major |
专业 |
VARCHAR(20) |
否 |
否 |
否 |
否 |
否 |
age |
年龄 |
INT(4) |
否 |
否 |
否 |
否 |
否 |
2.1.1、创建视图
使用CREATE VIEW语句来创建视图college_view,显示studentinfo表中的number,name,age,major,并将字段名显示为:student_num,student_name, student_age, department。
mysql> create table studentinfo(
-> number int(4) primary key not null unique comment '学号',
-> name varchar(20) not null comment '姓名',
-> major varchar(20) comment '专业',
-> age int(4) comment '年龄'
-> );
答:
Create view college_view(studnet_num,student_name,studnet_age,department) as select number,name,age,major from studentinfo;
2.1.2、查看视图
执行SHOW CREATE VIEW语句来查看视图的详细结构。
Describe college_view;
Show table status like ‘college_view’;
show create view college_view;
答:show create view college_view;
+--------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| View | Create View | character_set_client | collation_connection |
+--------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| college_view | CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `college_view` AS select `studentinfo`.`number` AS `studnet_num`,`studentinfo`.`name` AS `student_name`,`studentinfo`.`age` AS `studnet_age`,`studentinfo`.`major` AS `department` from `studentinfo` | utf8 | utf8_general_ci |
+--------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
1 row in set
2.1.3、更新视图(插入、更新、删除)
向视图中插入如下3条记录:
0901,'张三',20,'外语'
0902,'李四',22,'计算机'
0903,'王五',19,'计算机'
答:
insert into college_view() values
-> (0901,'张三',20,'外语'),
-> (0902,'李四',22,'计算机'),
-> (0903,'王五',19,'计算机');
2.1.4、修改视图
使视图中只显示专业为“计算机”的信息。
Create or replace view college_view(student_num, student_name, student_age,department) as select number,name,age, major from studentinfo where major='计算机' with local check option;
local check option 是可选参数,表示更新视图是要保证在改视图的权限范围之内,可选属性,为了数据安全性建议使用。
答:或者 alter view
Alter view college_view(student_num,student_name,student_age,department)
-> as select number,name,age, major
-> from studentinfo where major='计算机' with local check option;
2.1.5、删除视图
答:drop view college_view;
三、总结
创建视图和修改视图为重点,并且以查看辅助。