MySQL——更新视图

2025-08-23 12:11:43

一. 更新视图 更新视图是指通过视图来插入、更新、删除表中的数据。视图是一个虚拟表,其中没有数据,通过视图更新的时候都是转到基本表上进行更新的,如果对视图增加或者删除记录,实际上是对其基本表增加或者删除记录。

更新视图的三种方法:INSERT、UPDATE 和 DELETE。

1. 使用 UPDATE 语句更新视图 【例】使用 UPDATE 语句更新视图 view_t。

更新前:

mysql> SELECT * FROM view_t;

+----------+

| quantity |

+----------+

| 3 |

+----------+更新语句:

mysql> UPDATE view_t SET quantity=5;

Query OK, 1 row affected (0.13 sec)更新后:

mysql> SELECT * FROM view_t;

+----------+

| quantity |

+----------+

| 5 |

+----------+对视图 view_t 更新后,基本表 t 也更新了。

mysql> SELECT * FROM t;

+----------+-------+

| quantity | price |

+----------+-------+

| 5 | 50 |

+----------+-------+2. 使用 INSERT 语句更新视图

【例】使用 INSERT 语句在基本表 t 中插入一条记录。

插入前:mysql> SELECT * FROM t;

+----------+-------+

| quantity | price |

+----------+-------+

| 5 | 50 |

+----------+-------+插入语句:

mysql> INSERT INTO t VALUES (3,5);

Query OK, 1 row affected (0.10 sec)更新后:

mysql> SELECT * FROM t;

+----------+-------+

| quantity | price |

+----------+-------+

| 5 | 50 |

| 3 | 5 |

+----------+-------+基于 t 表的视图 view_t2 也跟新了:

mysql> SELECT * FROM view_t2;

+------+-------+-------+

| qty | price | total |

+------+-------+-------+

| 5 | 50 | 250 |

| 3 | 5 | 15 |

+------+-------+-------+3. 用 DELETE 语句更新视图 【例】使用 DELETE 语句删除视图 view_t2 中的一条记录。

更新前:

mysql> SELECT * FROM view_t2;

+------+-------+-------+

| qty | price | total |

+------+-------+-------+

| 5 | 50 | 250 |

| 3 | 5 | 15 |

+------+-------+-------+更新语句:

mysql> DELETE FROM view_t2 WHERE price=5;

Query OK, 1 row affected (0.10 sec)更新后:

mysql> SELECT * FROM view_t2;

+------+-------+-------+

| qty | price | total |

+------+-------+-------+

| 5 | 50 | 250 |

+------+-------+-------+

二. 更新视图的限制 并不是所有的视图都可以更新,以下几种情况是不能更新视图的:

1. 视图中包含 COUNT()、SUM()、MAX() 和 MIN() 等聚合函数。

2. 视图中包含 UNION、UNION ALL、DISTINCT、 GROUP BY 和 HAVING 等关键字。

3. 常量视图。

4. 视图中的 SELECT 中包含子查询。

5. 由不可更新的视图导出的视图。

6. 创建视图时,ALGORITHM 为 TEMPTABLE 类型。

【注】 视图中虽然可以更新数据,但是有很多的限制。一般情况下,最好将视图作为查询教据的虚拟表,而不要通过视图更新数据。因为,使用视图更新数据时,如果没有全面考虑在视图中更新数据的限制,可能会造成数据更新失败。

【注】参考于清华大学出版社《MySQL数据库应用案例课堂》2016年1月第1版