MySQL学习入门指南:通过视图创建可更新视图并更新底层表中的数据
如何通过视图创建可更新视图并更新底层表中的数据。
MySQL可更新视图简介
在MySQL中,视图不仅可以查询,还可以更新。这意味着您可以通过可使用 INSERT 或 UPDATE 语句进行更新的更新来插入或更新基表的行。或者,您可以使用 DELETE 语句通过视图从基础表中删除行。
但是,要创建可更新的更新,定义视图的 SELECT 语句不能包含以下任何元素:
- 聚合函数,例如:MIN、MAX、SUM、AVG、COUNT 等。
- DISTINCT 语句
- GROUP BY 子句
- HAVING 子句
- UNION 或
UNION ALL
子句 - 左连接或外连接。
- SELECT 子句中的子查询或引用表的 WHERE 子句中的子查询出现在
FROM
子句中。 - 在
FROM
语句中对不可更新视图的引用 - 仅对文字值的引用
- 对基表中任何列的多个引用♿我是使用基表♿TEMPTING算法创建的,它无法更新视图。
请注意,有时可以使用内部联接来创建基于多个表的可更新视图。
MySQL 可更新视图示例
我们首先来看看如何创建可更新视图。
首先,根据示例数据库(yiibaidb)中的表
offices
创建一个名为officeInfo
的视图。此视图引用表offices
中的三列:officecode
、phone
和❀。 ? 然后使用以下 UPDATE 语句通过officeInfo 视图
将officeCode
的值更改为:4
的办公室号码。SQL最后检查更改的结果,并检查以下查询来查询视图中的
OfficeInfo
数据:
Shell的更新信息表中的视图信息模式 数据库查询列mysql> SELECT * FROM officeInfo WHERE officeCode = 4; +------------+------------------+-------+ | officeCode | phone | city | +------------+------------------+-------+ | 4 | +86 089866668888 | Paris | +------------+------------------+-------+ 1 row in set
is_updating
以检查数据库中的视图是否可以更新。以下查询语句将查询
yiibaidb
数据库以检索所有视图并显示哪些视图可更新。
SQLSELECT table_name, is_updatable FROM information_schema.views WHERE table_schema = 'yiibaidb';
执行上面的查询语句,得到如下结果-
SQL+------------------+--------------+ | table_name | is_updatable | +------------------+--------------+ | aboveavgproducts | YES | | bigsalesorder | YES | | customerorders | NO | | officeinfo | YES | | saleperorder | NO | +------------------+--------------+ 5 rows in set
通过视图删除行
先创建一个表名❝,在
项中插入一些行 表,并创建一个包含价格大于
id700
的商品的查询。
SQLUSE testdb; -- create a new table named items CREATE TABLE items ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, price DECIMAL(11 , 2 ) NOT NULL ); -- insert data into the items table INSERT INTO items(name,price) VALUES('Laptop',700.56),('Desktop',699.99),('iPad',700.50) ; -- create a view based on items table CREATE VIEW LuxuryItems AS SELECT * FROM items WHERE price > 700; -- query data from the LuxuryItems view SELECT * FROM LuxuryItems;
执行上述查询语句后,得到以下结果 -
Shell+----+--------+--------+ | id | name | price | +----+--------+--------+ | 1 | Laptop | 700.56 | | 3 | iPad | 700.5 | +----+--------+--------+ 2 rows in set
第二个,使用,使用TE❝D te
3
可以。
SQLDELETE FROM LuxuryItems WHERE id = 3;
MySQL 返回一条消息,指示
1
行受到影响。
SQLQuery OK, 1 row affected
第三步,再次通过视图查看数据。
SQLmysql> SELECT * FROM LuxuryItems; +----+--------+--------+ | id | name | price | +----+--------+--------+ | 1 | Laptop | 700.56 | +----+--------+--------+ 1 row in set
第四步,也可以从基表
items❙中查询数据来确认是否存在行。
SQLmysql> SELECT * FROM items; +----+---------+--------+ | id | name | price | +----+---------+--------+ | 1 | Laptop | 700.56 | | 2 | Desktop | 699.99 | +----+---------+--------+ 2 rows in set
如上图,基表中
ID
为3
的行被删除。在本教程中,我们向您展示了如何创建可更新视图并更新基础表中的数据。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。