MySQL视图篇,视图的优缺点以及创建视图
1、优点
简单化,数据所见即所得
安全性,用户只能查询或修改他们所能见到得到的数据
逻辑独立性,可以屏蔽真实表结构变化带来的影响

2、缺点
性能相对较差,简单的查询也会变得稍显复杂
修改不方便,特变是复杂的聚合视图基本无法修改

1、创建用户表
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4;
插入演示用户数据
INSERT INTO `t_user` VALUES ('1', '甲');
INSERT INTO `t_user` VALUES ('2', '乙');
INSERT INTO `t_user` VALUES ('3', '丙');
INSERT INTO `t_user` VALUES ('4', '丁');
INSERT INTO `t_user` VALUES ('5', '戍');
INSERT INTO `t_user` VALUES ('6', '己');
INSERT INTO `t_user` VALUES ('7', '庚');
INSERT INTO `t_user` VALUES ('8', '辛');
INSERT INTO `t_user` VALUES ('9', '壬');
INSERT INTO `t_user` VALUES ('10', '癸');

2、创建用户信息表
DROP TABLE IF EXISTS `t_user_info`;
CREATE TABLE `t_user_info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`uid` int(11) DEFAULT NULL,
`age` varchar(20) DEFAULT NULL,
`sex` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4;
插入演示信息数据
INSERT INTO `t_user_info` VALUES ('1', '1', '11', '男');
INSERT INTO `t_user_info` VALUES ('2', '2', '12', '女');
INSERT INTO `t_user_info` VALUES ('3', '3', '13', '男');
INSERT INTO `t_user_info` VALUES ('4', '4', '14', '女');
INSERT INTO `t_user_info` VALUES ('5', '5', '15', '男');
INSERT INTO `t_user_info` VALUES ('6', '6', '16', '女');
INSERT INTO `t_user_info` VALUES ('7', '7', '17', '男');
INSERT INTO `t_user_info` VALUES ('8', '8', '18', '女');
INSERT INTO `t_user_info` VALUES ('9', '9', '19', '男');
INSERT INTO `t_user_info` VALUES ('10', '10', '20', '女');

1、语法结构:
{ CREATE|REPLACE } [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [{column_list}]
AS SELECT_STATEMENT
[WITH [CASCADED | LOCAL |] CHECK OPTION]
释义:
CREATE|REPLACE : 【创建|替换已创建的】视图
ALGORITHM : 视图算法 1.UNDEFINED 系统自动选择算法 2.MERGE使用的视图语句与视图定义合并起来 3.TEMPTABLE 结果存入临时表,然后用临时表执行语句
view_name : 视图名称
column_list : 属性列
SELECT_STATEMENT :SELECT语句
[WITH [CASCADED | LOCAL |] CHECK OPTION] 表示视图在更新时保证在视图的权限范围内 1.CASCADED 默认值 更新视图时要满足所有相关视图和表的条件,LOCAL表示更新视图时满足该视图本身定义的条件即可。

2、示例1:在单表中创建视图
创建视图
CREATE VIEW test_view_1 AS SELECT `name` FROM t_user;
查询视图
SELECT * FROM test_view_1;


3、示例2:指定视图字段名
创建视图
CREATE VIEW test_view_2(username) AS SELECT `name` FROM t_user;
查询视图
SELECT * FROM test_view_2;


4、示例3:在多表中创建视图
创建视图
CREATE VIEW test_view_3 (username, userage, usersex) AS SELECT
t_user.`name`,
t_user_info.age,
t_user_info.sex
FROM
t_user,
t_user_info
WHERE
t_user.id = t_user_info.uid;
查询视图
SELECT * FROM test_view_3;

