多语言展示
当前在线:1390今日阅读:126今日分享:42

MySQL视图篇,更新视图

更新视图,指的是通过视图来插入、更新、删除表中的数据,使用的INSERT,UPDATE,DELETE语句。需要注意的是修改视图指的是修改视图本身,而更新视图则是更新视图数据
工具/原料
1

电脑

2

MySQL

3

Navicat等数据库可视化管理工具

创建测试数据
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', '癸');

创建视图
1

CREATE VIEW test_view_1 AS SELECT `name` FROM t_user;

2

CREATE VIEW test_view_2(username) AS SELECT `name` FROM t_user;

3

CREATE VIEW test_view_3 (username, userage, usersex) AS SELECT        t_user.`name`,        t_user_info.age,        t_user_info.sexFROM        t_user,        t_user_infoWHERE        t_user.id = t_user_info.uid;

更新单表视图
1

单表视图插入数据插入数据INSERT INTO test_view_1 VALUES ('子');查询视图SELECT * FROM test_view_1;

2

单表视图修改数据UPDATE test_view_1 set tname2 = '丑' where tname2='子';查询视图SELECT * FROM test_view_1;

3

单表视图删除数据DELETE FROM test_view_1 WHERE tname2='丑';查询视图SELECT * FROM test_view_1;

更新多表聚合视图
1

查询聚合视图test_view_3的数据SELECT * FROM test_view_3;

2

插入数据,错误示范!INSERT INTO test_view_3 (username,userage,usersex) VALUES ('子','21','男');报错了,原因是同时修改两个表的数据

3

修改原视图ALTER VIEW test_view_3 (id,uid,username, userage, usersex) AS SELECT        t_user.`id`,        t_user_info.`uid`,        t_user.`name`,        t_user_info.age,        t_user_info.sexFROM        t_user,        t_user_infoWHERE        t_user.id = t_user_info.uid;查询视图SELECT * FROM test_view_3;

4

分别对两张表的数据进行两次插入操作INSERT INTO test_view_3(id,username) VALUES (11,'子');INSERT INTO test_view_3(uid,userage,usersex) VALUES (11,21,'男');查询视图SELECT * FROM test_view_3;

5

修改数据错误示范UPDATE test_view_3 SET username = '丑',userage = 22  where id=11;报错了,同理不可跨表操作

6

正确操作UPDATE test_view_3 SET username = '丑' where id=11;UPDATE test_view_3 SET userage = 22 where id=11;查询视图SELECT * FROM test_view_3;

7

删除操作错误示范DELETE FROM test_view_3 where id = 11;报错了,同理不可跨表操作

8

当视图包含以下内容时,视图更新操作将不能执行1.视图中不包含及表中定义非空的列;2.在定义视图的SELECT语句后的字段列表使用了数学表达式3.在定义视图的SELECT语句后的字段列表使用了聚合函数4.在定义视图的SELECT语句后的字段列表使用了DISTINCT,UNION,TOP,GROUP BY 或HAVING子句综上,对视图进行增删改非常麻烦,个人不建议使用视图直接进行更新,建议直接对基表进行操作。

注意事项
1

更新视图指的是更新视图数据而非修改视图本身

2

多表聚合视图不建议直接在视图内部进行修改

推荐信息