首页 > 编程笔记 > MySQL笔记 阅读:7

MySQL更新视图的3种方法(附带实例)

更新视图是指通过视图来插入、更新、删除表中的数据,因为视图是一个虚拟表,其中没有数据。

通过视图所做的更新,都是转到基本表上进行更新的,如果对视图增加或者删除记录,实际上是对其基本表增加或者删除记录。

本节将介绍 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,可以看到通过视图删除其所依赖的基本表中的数据。

当视图中包含有如下内容时,视图的更新操作将不能被执行:

相关文章