MySQL视图篇,更新视图
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 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.sex
FROM
t_user,
t_user_info
WHERE
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.sex
FROM
t_user,
t_user_info
WHERE
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子句
综上,对视图进行增删改非常麻烦,个人不建议使用视图直接进行更新,建议直接对基表进行操作。
