Mysql视图

目录

实践

保证视图的数据一致性


实践

1.sql中的视图,其实是一个虚拟表,使用时动态检索查询数据,如何理解这个概念呢?我们先建立基础表,语句如下:

DROP TABLE IF EXISTS `user_info`;
CREATE TABLE `user_info` (
  `id` int(20) NOT NULL AUTO_INCREMENT,
  `arts_name` varchar(20) DEFAULT NULL,
  `user_name` varchar(20) DEFAULT NULL,
  `user_pwd` varchar(20) DEFAULT NULL,
  `rank_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `FK1gy0qoa8oxhd6lv5j41ubn0if` (`rank_id`),
  CONSTRAINT `FK1gy0qoa8oxhd6lv5j41ubn0if` FOREIGN KEY (`rank_id`) REFERENCES `user_rank` (`rank_id`)
) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8;
 
-- ----------------------------
-- Records of user_info
-- ----------------------------
INSERT INTO `user_info` VALUES ('1', '扫地僧', 'admin', '000000', '6');
INSERT INTO `user_info` VALUES ('2', '降龙十八掌', '萧峰', '111111', '5');
INSERT INTO `user_info` VALUES ('3', '六脉神剑', '段誉', '111111', '5');
INSERT INTO `user_info` VALUES ('4', '小无相功', '虚竹', '222222', '5');
INSERT INTO `user_info` VALUES ('5', '易筋经', '游坦之', '222222', '3');
INSERT INTO `user_info` VALUES ('6', '斗转星移', '慕容复', '1111', '3');
INSERT INTO `user_info` VALUES ('7', '化功大法', '丁春秋', '11111', '3');
INSERT INTO `user_info` VALUES ('8', '天长地久不老长春功', '天山童姥', '222', '4');
INSERT INTO `user_info` VALUES ('9', '天山六阳掌', '无崖子', '333', '4');
INSERT INTO `user_info` VALUES ('11', '小无相功', '李秋水', '555', '3');
INSERT INTO `user_info` VALUES ('12', '颜值', '王语嫣', '2222222', '1');
INSERT INTO `user_info` VALUES ('13', '毒', '阿紫', '111111', '1');
INSERT INTO `user_info` VALUES ('14', '易容术', '阿朱', '111111', '2');
INSERT INTO `user_info` VALUES ('15', '一阳指', '段正淳', '111111', '2');
INSERT INTO `user_info` VALUES ('16', '鳄嘴剪', '南海鳄神', '111111', '2');
INSERT INTO `user_info` VALUES ('17', '轻功', '云中鹤', '111111', '1');
INSERT INTO `user_info` VALUES ('20', '嘴炮', '钟万仇', '666666', '1');
DROP TABLE IF EXISTS `user_rank`;
CREATE TABLE `user_rank` (
  `rank_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_rank_name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`rank_id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
 
-- ----------------------------
-- Records of user_rank
-- ----------------------------
INSERT INTO `user_rank` VALUES ('1', '青铜');
INSERT INTO `user_rank` VALUES ('2', '白银');
INSERT INTO `user_rank` VALUES ('3', '黄金');
INSERT INTO `user_rank` VALUES ('4', '铂金');
INSERT INTO `user_rank` VALUES ('5', '钻石');
INSERT INTO `user_rank` VALUES ('6', '王者');

2.建表完毕,我们利用create view as select xxx ——>在mysql中建立视图

CREATE VIEW view_name
AS
SELECT * FROM table_name ;
 
>>>>>示例<<<<<
CREATE VIEW userView
AS
SELECT * FROM user_info ; //创建视图
 
SELECT * FROM userView; //查询视图
 
UPDATE userView SET user_pwd='admin' WHERE user_name='admin'; //使用视图更新底层数据

视图的数据和表中的数据是不一致的情况

如果先建立视图,然后修改对应表中数据,视图是不会改变的

CREATE VIEW userView2
AS
SELECT * FROM user_info WHERE id<10
 
SELECT * FROM userView2;
 
INSERT INTO `user_info` VALUES ('22', '梅剑', '333', 'new', '1');

保证视图的数据一致性

创建了一个只展示1-10的视图数据,向底层user_info表插入一条数据,在该userView2中是看不到的,所以实际应用中可以在创建或修改视图时使用WITH CHECK OPTION(确保视图的一致性),使用了WITH CHECK OPTION,用户只能显示或更新通过视图可见的数据,比如:

CREATE VIEW itema_view AS SELECT * FROM tb_item WITH CHECK OPTION;


 

总结:

1)简单化,数据所见即所得(比如5张表关联,但是查询只需要每一张表中的1-2个字段,建立视图最合适)

2)实现访问性控制,更加安全(用户只能查询或修改Where限制的数据,所以可以隐蔽真实表中的数据结构)

缺点:

 1)性能相对较差(如果视图是基于其他视图创建,查询会相当慢)

2)修改不便

要创建可更新视图,定义视图的SELECT语句不能包含以下任何元素:
➢聚合函数;
➢distinct 子句;
➢group by 子句;
➢having 子句;
➢union 和 union all 子句;
➢外连接
注意:不建议使用基于多表创建的视图进行更新操作。
 

>>>>>查看视图<<<<<
SHOW TABLE STATUS [LIKE 'view_name%'] ; (查看基本信息)
 
DESC view_name ; 或者 DESCRIBE view_name; (查看基本信息)
 
SHOW CREATE VIEW view_name ; (查看详细信息)
 
SELECT * FROM information_schema.views; (查看数据库中所有视图详细信息)
 
>>>>>删除视图<<<<<
DROP VIEW IF EXISTS view_name ;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fairy要carry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值