如果值没有更改,SQL触发器将更新记录而不是插入记录

时间:2019-02-03 22:22:50

标签: mysql sql triggers insert

我正在尝试实现一个SQL触发器,如果​​一列的值发生更改,该触发器将更新而不是INSERTing。

示例表

only_full_group_by

该表没有主键,因为它将具有相同ID的多个记录,每个记录具有不同的日期。我想节省一些空间的是,如果收入已更改,则是更新而不是插入...例如,如果下一条记录将是:

Id | Name | Income | Date
11   John   10000    2019-02-01
11   John   15000    2019-02-02

我希望触发器更新DATE,而不是在表上创建新记录。所以最终会像这样:

11  John  15000  2019-02-03

数据来自一个小时表,该小时表记录了一天中的收入...在一天结束时,会将小时表中的所有记录大量插入到收入表中以保持历史记录。

我尝试了以下触发器,但由于它已锁定,因此无法正常工作。

11   John   10000    2019-02-01
11   John   15000    2019-02-03  <-- Changed!

我也打算执行UPDATE而不是INSERT,并执行相反的触发器,如果​​收入发生变化,则会插入一条新记录,但是我不知道我可以将哪个列作为更新的主要内容。 / p>

如果这是一个愚蠢的问题,我深表歉意,但是这困扰了我一段时间。

非常感谢!

1 个答案:

答案 0 :(得分:0)

如果您只关心节省空间,我认为您应该只在尝试插入具有相同金额的新收入之前删除具有相同收入记录的上个月。

Dataframe_1 = pd.DataFrame(Dataframe_1, index=names, columns=names)
Dataframe_2 = pd.DataFrame(Dataframe_1, index=names, columns=names)
Dataframe_3 = pd.DataFrame(Dataframe_1, index=names, columns=names)
Dataframe_4 = pd.DataFrame(Dataframe_1, index=names, columns=names)

for r in range(Dataframe_1 .columns.size):
   for c in range(Dataframe_1 .columns.size):
       Dataframe_2.loc[r,c] = jellyfish.hamming_distance(Dataframe_1.index[r],Dataframe_1.columns[c])
       Dataframe_3.loc[r,c] = jellyfish.levenshtein_distance(Dataframe_1.index[r],Dataframe_1.columns[c])
       Dataframe_4.iloc[r,c] = jellyfish.jaro_distance(Dataframe_1.index[r],Dataframe_1.columns[c])