前言
本文类容
mysql 视图的创建 查询 删除 以及作用
视图的作用
简单:使用视图的用户完全不用关心后面对应表的结构,关联条件和筛选条件,对于用户来说已经是过滤好的复合条件的结果集了
安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单地实现
数据独立:一旦视图结构确定了,就可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以简单的通过修改视图就能完成,不会对访问者造成影响
视图的创建
我们先创建三张表
课程表
CREATE TABLE `course` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(200) NOT NULL,
`description` varchar(500) NOT NULL,
PRIMARY KEY (`id`)
)
课程表插入数据
INSERT INTO `course` VALUES ('1', 'JAVA', 'JAVA课程');
INSERT INTO `course` VALUES ('2', 'C++', 'C++课程');
INSERT INTO `course` VALUES ('3', 'C语言', 'C语言课程');
学生表
CREATE TABLE `student` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`address` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
)
学生表插入的数据
INSERT INTO `user` VALUES ('1', ' 倪昊', '美国');
INSERT INTO `user` VALUES ('2', '太爷', '日本');
INSERT INTO `user` VALUES ('3', '刘洋', '中国');
中间表
CREATE TABLE `user_course` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`userid` bigint(20) NOT NULL,
`courseid` bigint(20) NOT NULL,
PRIMARY KEY (`id`)
)
数据
INSERT INTO `user_course` VALUES ('1', '1', '2');
INSERT INTO `user_course` VALUES ('2', '1', '3');
INSERT INTO `user_course` VALUES ('3', '2', '1');
INSERT INTO `user_course` VALUES ('4', '2', '2');
INSERT INTO `user_course` VALUES ('5', '2', '3');
INSERT INTO `user_course` VALUES ('6', '3', '2');
正常查询
SELECT
`uc`.`id` AS `id`,
`u`.`name` AS `username`,
`c`.`name` AS `coursename`
FROM
`user` `u`
LEFT JOIN `user_course` `uc` ON ((`u`.`id` = `uc`.`userid`))
LEFT JOIN `course` `c` ON ((`uc`.`courseid` = `c`.`id`))
WHERE
u.`name` = '刘洋'
查询结果
创建视图
create or replace view_user_course as
SELECT
`uc`.`id` AS `id`,
`u`.`name` AS `username`,
`c`.`name` AS `coursename`
FROM
`user` `u`
LEFT JOIN `user_course` `uc` ON ((`u`.`id` = `uc`.`userid`))
LEFT JOIN `course` `c` ON ((`uc`.`courseid` = `c`.`id`))
WHERE
u.`name` = '刘洋'
查询视图
在mysql5.1版本之后,show table就可以直接看到视图,并不需要在用到show view了
SELECT
vuc.username,
vuc.coursename
FROM
view_user_course vuc
WHERE
vuc.username = '刘洋'
删除视图
drop view view_user_course