Code前端首页关于Code前端联系我们

MySQL学习入门指南:通过视图创建可更新视图并更新底层表中的数据

terry 2年前 (2023-09-26) 阅读数 46 #数据库

如何通过视图创建可更新视图并更新底层表中的数据。

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 中的三列:officecodephone 和❀。 ? 然后使用以下 UPDATE 语句通过 officeInfo 视图 officeCode 的值更改为:4 的办公室号码。SQL

    最后检查更改的结果,并检查以下查询来查询视图中的OfficeInfo数据:

    mysql> SELECT 
        *
    FROM
        officeInfo
    WHERE
        officeCode = 4;
    
    +------------+------------------+-------+
    | officeCode | phone            | city  |
    +------------+------------------+-------+
    | 4          | +86 089866668888 | Paris |
    +------------+------------------+-------+
    1 row in set
    
    Shell的更新信息表中的视图信息模式 数据库查询列 is_updating 以检查数据库中的视图是否可以更新。

    以下查询语句将查询yiibaidb数据库以检索所有视图并显示哪些视图可更新。

    SELECT 
        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
    
    SQL

    通过视图删除行

    先创建一个表名❝,在项中插入一些行 表,并创建一个包含价格大于 700 的商品的查询。

    USE 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;
    
    SQL

    执行上述查询语句后,得到以下结果 -

    +----+--------+--------+
    | id | name   | price  |
    +----+--------+--------+
    |  1 | Laptop | 700.56 |
    |  3 | iPad   | 700.5  |
    +----+--------+--------+
    2 rows in set
    
    Shell

    第二个,使用,使用TE❝D te

    id 3 可以。

    DELETE FROM LuxuryItems 
    WHERE
        id = 3;
    
    SQL

    MySQL 返回一条消息,指示 1 行受到影响。

    Query OK, 1 row affected
    
    SQL

    第三步,再次通过视图查看数据。

    mysql> SELECT * FROM LuxuryItems;
    +----+--------+--------+
    | id | name   | price  |
    +----+--------+--------+
    |  1 | Laptop | 700.56 |
    +----+--------+--------+
    1 row in set
    
    SQL

    第四步,也可以从基表items❙中查询数据来确认是否存在行。

    mysql> SELECT  * FROM items;
    +----+---------+--------+
    | id | name    | price  |
    +----+---------+--------+
    |  1 | Laptop  | 700.56 |
    |  2 | Desktop | 699.99 |
    +----+---------+--------+
    2 rows in set
    
    SQL

    如上图,基表中ID3的行被删除。

    在本教程中,我们向您展示了如何创建可更新视图并更新基础表中的数据。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门