如果我有两张桌子。表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?
发布于 2017-08-20 02:36:37
当然,您可以使用触发器,但在这种情况下,触发器是完全不必要的。它们很难管理和更改,所以除非您需要以SQL无法实现的方式处理输入数据(比如您需要执行一些第三方软件),否则最好创建一个视图。
视图是一种特殊类型的表,定义为对现有数据的SQL查询。在提供的示例中,您将通过运行以下命令创建这样一个表:
CREATE VIEW table2 AS
SELECT userId, number * 2 as number FROM table1;
在这里,我们指示数据库创建一个名为table2的视图或其他虚拟表,其内容被定义为select查询的结果。
要访问输出数据,只需运行:
SELECT * FROM table2;
更好的是,无论您如何更改table1的数据(通过插入、更新或删除),视图都将反映这些更改。如果您决定改变table1的结构,只要它仍然包含userID和number属性,就没有问题。如果您决定需要在table2中包含更多(或更少)数据,您可以简单地删除此视图并创建一个新的视图,而不会丢失数据。
参见How do I create a view in MySQL?,What are views good for?以及。
发布于 2017-08-18 09:40:09
您可以创建一个触发器,在更新表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;
发布于 2017-08-18 10:55:12
您需要在更新触发器之后使用
在table1上插入或更新后为每一行创建触发器触发器名,开始插入到table2(new.userid,new.Number*2);End
https://stackoverflow.com/questions/45761629
复制相似问题