更新另一列时自动更新sql列

Posted

技术标签:

【中文标题】更新另一列时自动更新sql列【英文标题】:auto update sql column when another column is updated 【发布时间】:2016-11-30 05:55:01 【问题描述】:

我在 sql 表中有两列(creditsbadge)。我希望在更新积分时徽章根据积分新值进行更改。

例如,当积分

我尝试了触发器,但由于某种原因它们不起作用(mysql 错误 #1442)

我正在使用 phpMyAdmin 触发器:

update users 
set badge = (CASE 
    WHEN credits < 50 
    THEN 1
    WHEN credits >= 50 
    THEN 2
    WHEN credits >= 100 
    THEN 3
    WHEN credits >= 125 
    THEN 4
    WHEN credits >= 150 
    THEN 5
    WHEN credits >= 200 
    THEN 6
END)

【问题讨论】:

根据question,您似乎正在尝试在触发器中编辑同一个表 你能告诉我们你试图创建的触发器并给你一个错误吗? 帮助我们为您提供帮助向我们展示您尝试过的内容,有人会建议对代码进行更正或更好的方法。但是它不起作用根本没有帮助。 您可以在 SQL Server 中使用 case 语句创建约束,但我不确定 mysql 中的语法 对于这种情况,如果您的徽章取决于一系列信用,例如 100-200 = 高级,为什么还要在同一个表中同时拥有徽章和信用。那为什么不分开,我知道它不是直接回答问题,只是作为一个想法。 【参考方案1】:

您可以在 MySQL/MariaDB 中使用虚拟列。他们可以计算。如果要搜索新字段,可以使用持久性字段。

CREATE TABLE `table1` (
  `a` int(11) NOT NULL,
  `b` varchar(32) DEFAULT NULL,
  `c` int(11) AS (a mod 10) VIRTUAL,
  `d` varchar(5) AS (left(b,5)) PERSISTENT
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

参见手册:https://mariadb.com/kb/en/mariadb/virtual-computed-columns/

【讨论】:

以上是关于更新另一列时自动更新sql列的主要内容,如果未能解决你的问题,请参考以下文章

当您需要基于另一列更新列时,在 Pandas 中循环的替代方法

当用户在 MS Access 中修改表中的另一列时,如何在 SQL Server 中将列设置为今天的日期 [关闭]

触发器 - 如何在更新另一列时更改另一列 - MySQL

根据MySQL中另一列分组的另一列的顺序更新列

SQL 从另一个表中的另一列更新一列

当我在 ember 数据中创建或更新 (belongs_to) 模型和 (has_many) 模型中的自动同步更新列时