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

时间:2017-08-18 17:01:57

标签: mysql database

如果我有两张桌子。表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?

3 个答案:

答案 0 :(得分:0)

您可以创建一个触发器,当表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;

答案 1 :(得分:0)

需要在更新触发器后使用

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

答案 2 :(得分:0)

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

视图是一种特殊类型的表,它被定义为对现有数据的SQL查询。在提供的示例中,您将通过运行:

来创建此类表
CREATE VIEW table2 AS
    SELECT userId, number * 2 as number FROM table1;

在这里,我们指示数据库创建一个名为 table2 的视图或虚拟表,其内容被定义为select查询的结果。< / p>

要访问输出数据,您只需运行:

SELECT * FROM table2;

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

同时参见How do I create a view in MySQL?What are views good for?