MySQL如何创建触发器以在记录从另一个表更新时推送数据

MySQL如何创建触发器以在记录从另一个表更新时推送数据,mysql,Mysql,以下是db fiddle链接: 如何创建触发器来执行以下(2个操作): id text_field 1 Option1 id table_oneID new_text_field old_text_field1 old_text_field2 1 1 Option1 id text_field 1 New Text 操作1-如果表1中出现新记录,则会将新记录插入历史记录 e、 g 表1: insert into

以下是db fiddle链接:

如何创建触发器来执行以下(2个操作):

id   text_field
1     Option1
id   table_oneID   new_text_field  old_text_field1   old_text_field2
1        1            Option1
id   text_field
1     New Text
操作1-如果表1中出现新记录,则会将新记录插入历史记录

e、 g

表1:

 insert into table_one (text_field) values ('Option1');
输出:

id   text_field
1     Option1
id   table_oneID   new_text_field  old_text_field1   old_text_field2
1        1            Option1
id   text_field
1     New Text
表一:

id   text_field
1     Option1
id   table_oneID   new_text_field  old_text_field1   old_text_field2
1        1            Option1
id   text_field
1     New Text
历史记录表:

id   text_field
1     Option1
id   table_oneID   new_text_field  old_text_field1   old_text_field2
1        1            Option1
id   text_field
1     New Text
等等

行动2-

如果我像这样更新表1:

update table_one set text_field = 'New Text' where id = 1;
一张表格变成:

id   text_field
1     Option1
id   table_oneID   new_text_field  old_text_field1   old_text_field2
1        1            Option1
id   text_field
1     New Text
历史变为

id   table_oneID   new_text_field  old_text_field1   old_text_field2
1        1            New Text         Option1
它将旧文本向后推,将新文本推到前面

如何使用触发器实现这两个操作?

您需要两个触发器:

在表_上插入后,使用下一个查询:

INSERT INTO history_table (table_oneID, new_text_field) 
VALUES (NEW.id, NEW.text_field);
UPDATE history_table SET
    old_text_field7 =  old_text_field6,
    old_text_field6 =  old_text_field5,
    old_text_field5 =  old_text_field4,
    old_text_field4 =  old_text_field3,
    old_text_field3 =  old_text_field2,
    old_text_field2 =  old_text_field1,
    old_text_field1 =  NEW.text_field
WHERE table_oneID = NEW.id;
使用下一个查询更新表_one后:

INSERT INTO history_table (table_oneID, new_text_field) 
VALUES (NEW.id, NEW.text_field);
UPDATE history_table SET
    old_text_field7 =  old_text_field6,
    old_text_field6 =  old_text_field5,
    old_text_field5 =  old_text_field4,
    old_text_field4 =  old_text_field3,
    old_text_field3 =  old_text_field2,
    old_text_field2 =  old_text_field1,
    old_text_field1 =  NEW.text_field
WHERE table_oneID = NEW.id;
您需要2个触发器:

在表_上插入后,使用下一个查询:

INSERT INTO history_table (table_oneID, new_text_field) 
VALUES (NEW.id, NEW.text_field);
UPDATE history_table SET
    old_text_field7 =  old_text_field6,
    old_text_field6 =  old_text_field5,
    old_text_field5 =  old_text_field4,
    old_text_field4 =  old_text_field3,
    old_text_field3 =  old_text_field2,
    old_text_field2 =  old_text_field1,
    old_text_field1 =  NEW.text_field
WHERE table_oneID = NEW.id;
使用下一个查询更新表_one后:

INSERT INTO history_table (table_oneID, new_text_field) 
VALUES (NEW.id, NEW.text_field);
UPDATE history_table SET
    old_text_field7 =  old_text_field6,
    old_text_field6 =  old_text_field5,
    old_text_field5 =  old_text_field4,
    old_text_field4 =  old_text_field3,
    old_text_field3 =  old_text_field2,
    old_text_field2 =  old_text_field1,
    old_text_field1 =  NEW.text_field
WHERE table_oneID = NEW.id;

“使用触发器”他们不能。你需要两个触发器一个接一个地插入一个接一个地更新。我会重新设计你的历史记录表,这样你就不会有多个旧的文本字段。@P.Salmon你会如何重新设计它我会非常高兴听到的!为了简单起见,我会使用id、table_column、oneID、oldvalue、newvalue timestamp(这样我就知道发生的时间),其中column是被更改的列的名称。@P.Salmon这很好,但是关于向后推送数据。。可能吗?如果是这样的话,怎么做呢?“使用触发器”他们不能。你需要两个触发器,一个在插入之后,一个在更新之后。我会重新设计你的历史记录表,这样你就不会有多个旧的文本字段。@P.Salmon你会如何重新设计它我会非常高兴听到的!为了简单起见,我会使用id、table_column、oneID、oldvalue、newvalue timestamp(这样我就知道发生的时间),其中column是被更改的列的名称。@P.Salmon这很好,但是关于向后推送数据。。可能吗?如果是,如何做到?