MySQL视图篇,更新视图

2025-10-24 13:34:49

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', '癸');

MySQL视图篇,更新视图

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', '女');

MySQL视图篇,更新视图

1、CREATE VIEW test_view_1 AS SELECT `name` FROM t_user;

MySQL视图篇,更新视图

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

MySQL视图篇,更新视图

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;

MySQL视图篇,更新视图

1、单表视图插入数据

插入数据

INSERT INTO test_view_1 VALUES ('子');

查询视图

SELECT * FROM test_view_1;

MySQL视图篇,更新视图

MySQL视图篇,更新视图

2、单表视图修改数据

UPDATE test_view_1 set tname2 = '丑' where tname2='子';

查询视图

SELECT * FROM test_view_1;

MySQL视图篇,更新视图

MySQL视图篇,更新视图

3、单表视图删除数据

DELETE FROM test_view_1 WHERE tname2='丑';

查询视图

SELECT * FROM test_view_1;

MySQL视图篇,更新视图

MySQL视图篇,更新视图

1、查询聚合视图test_view_3的数据

SELECT * FROM test_view_3;

MySQL视图篇,更新视图

2、插入数据,错误示范!

INSERT INTO test_view_3 (username,userage,usersex) VALUES ('子','21','男');

报错了,原因是同时修改两个表的数据

MySQL视图篇,更新视图

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;

MySQL视图篇,更新视图

MySQL视图篇,更新视图

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;

MySQL视图篇,更新视图

MySQL视图篇,更新视图

5、修改数据错误示范

UPDATE test_view_3 SET username = '丑',userage = 22  where id=11;

报错了,同理不可跨表操作

MySQL视图篇,更新视图

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;

MySQL视图篇,更新视图

MySQL视图篇,更新视图

7、删除操作错误示范

DELETE FROM test_view_3 where id = 11;

报错了,同理不可跨表操作

MySQL视图篇,更新视图

8、当视图包含以下内容时,视图更新操作将不能执行

1.视图中不包含及表中定义非空的列;

2.在定义视图的SELECT语句后的字段列表使用了数学表达式

3.在定义视图的SELECT语句后的字段列表使用了聚合函数

4.在定义视图的SELECT语句后的字段列表使用了DISTINCT,UNION,TOP,GROUP BY 或HAVING子句

综上,对视图进行增删改非常麻烦,个人不建议使用视图直接进行更新,建议直接对基表进行操作。

MySQL视图篇,更新视图

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢