MYSQL 如何自动更新另一个表?

Posted

技术标签:

【中文标题】MYSQL 如何自动更新另一个表?【英文标题】:MYSQL How to automatically update a table from another? 【发布时间】:2017-08-18 17:01:57 【问题描述】:

如果我有两张桌子。表 1 和表 2。表 1 是允许用户输入值的“输入表”。表 2 是根据表 1 中的输入生成答案的“输出表”。

表1:

user ID | Number
1       |   1
2       |   2
3       |   3

假设表 2 取表 1 中的值并乘以 2。所以表 2 应该是

user ID | Number
1       |   2       
2       |   4    
3       |   6

现在,如果我更新表 1,它变成了

表1:

user ID | Number    
1       |    1    
2       |    2    
3       |    3    
4       |    4    
5       |    5    
6       |    6

如何在 MySQL 中自动更新表 2?

我想要的表 2 结果:

表2:

user ID | Number    
1       |    2    
2       |    4    
3       |    6    
4       |    8    
5       |    10    
6       |    12

如果表 2 已经存在,有没有办法在表 1 更新时使用触发器删除当前表 2 并创建新表 2?

【问题讨论】:

如果他们有密钥,请查看ON UPDATE CASCADE,如果他们没有使用TRIGGER 你的第二个表应该是一个视图。 【参考方案1】:

当然,您可以使用触发器,但在这种情况下,触发器是完全没有必要的。它们很难管理和更改,因此除非您需要以 SQL 无法实现的方式处理输入数据(例如您需要执行一些第三方软件),否则您最好创建一个 视图.

视图是一种特殊类型的表,它被定义为对现有数据的 SQL 查询。在提供的示例中,您可以通过运行以下命令创建这样一个表:

CREATE VIEW table2 AS
    SELECT userId, number * 2 as number FROM table1;

在这里,我们指示数据库创建一个名为 table2 的视图或其他虚拟表,其内容定义为选择查询的结果。

要访问您的输出数据,您可以简单地运行:

SELECT * FROM table2;

更好的是,无论你如何更改 table1 的数据(通过插入、更新或删除),视图都会反映这些更改。如果您决定更改 table1 的结构,则没有问题,只要它仍然包含 userID 和 number 属性。如果您决定需要更多(或更少)包含在 table2 中的数据,您可以简单地删除此视图并创建一个新视图,而不会丢失数据。

参见How do I create a view in mysql?、What are views good for?。

【讨论】:

【参考方案2】:

您可以创建一个触发器,当表 1 中的列更新时,该触发器将更新表 2 的列(编号)。

下面是原型。

CREATE OR REPLACE TRIGGER your_trigger_name
    BEFORE UPDATE ON Order
    FOR EACH ROW 
BEGIN
   //Fetch each row of Col Number of Table 2 in loop using a cursor and update/set its value.

select number into var_x from table 2 .
       UPDATE Table 2 
       set number = :2*var_x ;

    end if;
END;

【讨论】:

由于您重复使用表而不是删除并重新创建它,因此只需使用 TRUNCATE。【参考方案3】:

你需要在更新触发后使用

创建触发器触发器名称 在 table1 上插入或更新后 对于每一行 开始 插入table2(new.userid,new.Number*2); 结束

【讨论】:

以上是关于MYSQL 如何自动更新另一个表?的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL从另一个表更新数据,如果存在,否则插入[重复]

excel中,将一个工作表中几列数据自动更新到另一个工作表中对应的列中?

Excel 一张工作表变动后,怎么自动更新另一张表中的数据

如何使用计数查询来(自动)更新表中的列

sql中如何实现级联表的操作

excel中怎么用一个表的数据更新另一个表