MySQ视图

视图

什么是视图?

视图就是一条select语句执行后返回的结果集。

创建视图时,主要的任务就是这一条SQL查询语句。

作用:

对于复杂的SQL查询 => 写成视图 => 下次用方便

DBA写好视图给普通开发者用

写好视图,将视图授权给用户,达到更细粒度和精确的授权

特性:

视图对若干张表的引用,是一张虚表,不保存具体的数据,只保存查询方法(SQL)

如果表的数据发生了变化,视图的结果也会一起变化

使用场合:

1. 简化查询

2. 权限控制

创建两个表用于视图测试

SET FOREIGN_KEY_CHECKS=0; --》暂时禁用外键约束检查

DROP TABLE IF EXISTS course;

CREATE TABLE course (

sid int(11) NOT NULL AUTO_INCREMENT,

sname varchar(32) NOT NULL,

PRIMARY KEY (sid)

) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

INSERT INTO `course` VALUES ('1', '语文');

INSERT INTO `course` VALUES ('2', '数学');

INSERT INTO `course` VALUES ('3', '英语');

INSERT INTO `course` VALUES ('4', '物理');

INSERT INTO `course` VALUES ('5', '');

DROP TABLE IF EXISTS student;

CREATE TABLE student (

id int(11) NOT NULL AUTO_INCREMENT,

name varchar(32) NOT NULL,

course_id int(11) NOT NULL,

PRIMARY KEY (id),

KEY fk_student_course (course_id),

CONSTRAINT fk_student_course FOREIGN KEY (course_id) REFERENCES course (sid)

) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

INSERT INTO `student` VALUES ('1', '小飞', '1');

INSERT INTO `student` VALUES ('2', 'hukey', '2');

INSERT INTO `student` VALUES ('3', '小王', '3');

INSERT INTO `student` VALUES ('4', '阿狗', '4');

查询小飞上的所有课程相关信息(查看小飞课程的中文名字)

SELECT * FROM student LEFT JOIN course ON student.id = course.sid WHERE student.name = "小飞";

定义视图

CREATE ALGORITHM=UNDEFINED

DEFINER = 'root'@'localhost'

SQL SECURITY DEFINER

VIEW view_student_course AS (

SELECT * FROM student LEFT JOIN course ON student.id = course.sid);

ALGORITHM=UNDEFINED 指定视图的算法

SQL SECURITY DEFINER 指定视图查询数据时安全验证方式

简单的视图定义

CREATE VIEW view_student_course AS ( SELECT * FROM student LEFT JOIN course ON student.id = course.sid);

使用视图

>SELECT * FROM view_student_course WHERE name="小飞";

+----+--------+-----------+------+--------+

| id | name | course_id | sid | sname |

+----+--------+-----------+------+--------+

| 1 | 小飞 | 1 | 1 | 语文 |

+----+--------+-----------+------+--------+

插入语句进行测试

INSERT INTO student VALUES(5, "小刘", 5);

查看视图是否能查到刚才更新的数据

>SELECT * FROM view_student_course WHERE name="小刘";

+----+--------+-----------+------+-------+

| id | name | course_id | sid | sname |

+----+--------+-----------+------+-------+

| 5 | 小刘 | 5 | 5 | |

+----+--------+-----------+------+-------+

查看视图定义的方法

>SHOW TABLE STATUS WHERE COMMENT="view"\G

>SHOW CREATE VIEW view_student_course \G

修改视图

ALTER VIEW view_student_course AS (SELECT * FROM product);

查看视图修改是否成功--》成功

>SELECT * FROM view_student_course;

+------+-----------------+-------+-------------+

| pid | pname | price | category_id |

+------+-----------------+-------+-------------+

| 1 | 联想 | 5018 | c001 |

删除视图

DROP VIEW view_name;

你可能感兴趣的:(MySQL,数据库,mysql,学习,笔记,mariadb)