【问题标题】:updating a field on update of other field in same row在更新同一行中的其他字段时更新字段
【发布时间】:2013-07-31 06:47:42
【问题描述】:

我有一个这样的表:

用户级别

uid | level_order | current_level
---------------------------------
1   | 1,2,3       | 1
2   | 4,5,6       | 4
3   | 7,8,9       | 7

现在,如果我为特定用户更新 level_order 字段,我想使用触发器或过程更新 current_level。

例如,如果我运行此查询:
update user_level set level_order = '21,22,23' where uid=1;
那么表格应该像这样更新:

    uid | level_order | current_level
    ---------------------------------
    1   | 21,22,23    | 21
    2   | 4,5,6       | 4
    3   | 7,8,9       | 7  

是否可以使用triggerprocedure。 我正在使用MYSQL

【问题讨论】:

    标签: mysql sql database stored-procedures triggers


    【解决方案1】:

    我认为您不需要触发器。您可以像这样直接更新它。

       update user_level 
               set level_order = '21,22,23', 
               current_level=SUBSTRING_INDEX('21,22,23', ',', 1) 
               where uid=1;
    

    Sql Fiddle Demo

    【讨论】:

    • 这很有帮助,但这个值 21,22,23 是动态的,所以我还必须获取更新的 level_order
    • @HarjeetJadeja 将值传递到级别顺序的方式与将值传递到当前级别相同。
    【解决方案2】:

    试试下面的代码

    create trigger AutoUpdateCurrentLevelFromUserLevel
    after update
    on UserLevel
    for each row
    set CurrentLevel="{your value here}"
    

    【讨论】:

    • 我已经尝试过这个,但问题 ID 会将所有值 21,22,23 设置为 current_level。我只想设置第一个值21。而且这个值是动态的。
    • 不太确定,但试试这个 set CurrentLevel=SUBSTRING_INDEX(level_order, ',', 1)
    【解决方案3】:

    您可以使用触发器来实现相同的目的。触发器在您上面提到的用于实现约束的场景中非常有用。使用相同的更新触发器。您还可以在查询本身中嵌入对新行的更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-11
      • 2016-08-02
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-06
      • 2022-11-27
      相关资源
      最近更新 更多