电脑
MySQL
Navicat等数据库可视化管理工具
创建用户表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', '癸');
CREATE VIEW test_view_1 AS SELECT `name` FROM t_user;
CREATE VIEW test_view_2(username) AS SELECT `name` FROM t_user;
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;
单表视图插入数据插入数据INSERT INTO test_view_1 VALUES ('子');查询视图SELECT * FROM test_view_1;
单表视图修改数据UPDATE test_view_1 set tname2 = '丑' where tname2='子';查询视图SELECT * FROM test_view_1;
单表视图删除数据DELETE FROM test_view_1 WHERE tname2='丑';查询视图SELECT * FROM test_view_1;
查询聚合视图test_view_3的数据SELECT * FROM test_view_3;
插入数据,错误示范!INSERT INTO test_view_3 (username,userage,usersex) VALUES ('子','21','男');报错了,原因是同时修改两个表的数据
修改原视图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;
分别对两张表的数据进行两次插入操作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;
修改数据错误示范UPDATE test_view_3 SET username = '丑',userage = 22 where id=11;报错了,同理不可跨表操作
正确操作UPDATE test_view_3 SET username = '丑' where id=11;UPDATE test_view_3 SET userage = 22 where id=11;查询视图SELECT * FROM test_view_3;
删除操作错误示范DELETE FROM test_view_3 where id = 11;报错了,同理不可跨表操作
当视图包含以下内容时,视图更新操作将不能执行1.视图中不包含及表中定义非空的列;2.在定义视图的SELECT语句后的字段列表使用了数学表达式3.在定义视图的SELECT语句后的字段列表使用了聚合函数4.在定义视图的SELECT语句后的字段列表使用了DISTINCT,UNION,TOP,GROUP BY 或HAVING子句综上,对视图进行增删改非常麻烦,个人不建议使用视图直接进行更新,建议直接对基表进行操作。
更新视图指的是更新视图数据而非修改视图本身
多表聚合视图不建议直接在视图内部进行修改