MySQL更新视图的3种方法(附带实例)
更新视图是指通过视图来插入、更新、删除表中的数据,因为视图是一个虚拟表,其中没有数据。
通过视图所做的更新,都是转到基本表上进行更新的,如果对视图增加或者删除记录,实际上是对其基本表增加或者删除记录。
本节将介绍 MySQL 视图更新的 3 种方法:INSERT、UPDATE和DELETE。
【实例】使用 UPDATE 语句更新视图 view_t,代码如下:
使用 UPDATE 语句更新视图 view_t,执行过程如下:
【实例】使用 INSERT 语句在基本表 tv 中插入一条记录,代码如下:
【实例】使用 DELETE 语句删除视图 view_t2 中的一条记录,代码如下:
当视图中包含有如下内容时,视图的更新操作将不能被执行:
通过视图所做的更新,都是转到基本表上进行更新的,如果对视图增加或者删除记录,实际上是对其基本表增加或者删除记录。
本节将介绍 MySQL 视图更新的 3 种方法:INSERT、UPDATE和DELETE。
【实例】使用 UPDATE 语句更新视图 view_t,代码如下:
UPDATE view_t SET quantity=5;执行视图更新之前,查看基本表和视图的信息,执行结果如下:
mysql> SELECT * FROM view_t; +----------+ | quantity | +----------+ | 3 | +----------+ mysql> SELECT * FROM tv; +----------+-------+ | quantity | price | +----------+-------+ | 3 | 50 | +----------+-------+
使用 UPDATE 语句更新视图 view_t,执行过程如下:
mysql> UPDATE view_t SET quantity=5;查看视图更新之后,基本表的内容如下:
mysql> SELECT * FROM tv; +----------+-------+ | quantity | price | +----------+-------+ | 5 | 50 | +----------+-------+ mysql> SELECT * FROM view_t; +----------+ | quantity | +----------+ | 5 | +----------+ mysql> SELECT * FROM view_t2; +------+-------+-------+ | qty | price | total | +------+-------+-------+ | 5 | 50 | 250 | +------+-------+-------+对视图 view_t 更新后,基本表 tv 的内容也更新了;当对基本表 tv 更新后,另外一个视图 view_t2 中的内容也会更新。
【实例】使用 INSERT 语句在基本表 tv 中插入一条记录,代码如下:
INSERT INTO tv VALUES (3,5);执行结果如下:
mysql> INSERT INTO tv VALUES(3,5); Query OK, 1 row affected (0.04 sec) mysql> SELECT * FROM tv; +----------+-------+ | quantity | price | +----------+-------+ | 5 | 50 | | 3 | 5 | +----------+-------+ 2 rows in set (0.00 sec) mysql> SELECT * FROM view_t2; +------+-------+-------+ | qty | price | total | +------+-------+-------+ | 5 | 50 | 250 | | 3 | 5 | 15 | +------+-------+-------+ 2 rows in set (0.00 sec)向表 tv 中插入一条记录,通过 SELECT 查看表 tv 和视图 view_t2,可以看到其中的内容也跟着更新,视图更新的不仅仅是数量和单价,总价也会更新。
【实例】使用 DELETE 语句删除视图 view_t2 中的一条记录,代码如下:
DELETE FROM view_t2 WHERE price=5;执行结果如下:
mysql> DELETE FROM view_t2 WHERE price=5; Query OK, 1 row affected (0.03 sec) mysql> SELECT * FROM view_t2; +------+-------+-------+ | qty | price | total | +------+-------+-------+ | 5 | 50 | 250 | +------+-------+-------+ 1 row in set (0.00 sec) mysql> SELECT * FROM tv; +----------+-------+ | quantity | price | +----------+-------+ | 5 | 50 | +----------+-------+ 1 row in set (0.02 sec)在视图 view_t2 中删除 price=5 的记录,视图中的删除操作最终是通过删除基本表中相关的记录来实现的。查看删除操作之后的表 tv 和视图 view_t2,可以看到通过视图删除其所依赖的基本表中的数据。
当视图中包含有如下内容时,视图的更新操作将不能被执行:
- 视图中不包含基表中被定义为非空的列;
- 在定义视图的 SELECT 语句后的字段列表中使用了数学表达式;
- 在定义视图的 SELECT 语句后的字段列表中使用聚合函数;
- 在定义视图的 SELECT 语句中使用了 DISTINCT、UNION、TOP、GROUP BY 或 HAVING 子句。