在默认MySQL值中执行计算

时间:2012-08-28 16:06:00

标签: mysql database

有没有办法使用MySQL的默认值属性(即列定义的DEFAULT子句)基于相同或不同表中某些其他列的值执行计算?

我们可以为任何列设置静态默认值,但我们可以执行计算或查询其他表的数据吗?

修改

我们假设一个表格的列为marks,其他的列为total_marks,第三列为percentage。如何设置要从前两列计算的percentage的默认值

2 个答案:

答案 0 :(得分:8)

没有。 DEFAULT子句的值必须是常量。 (此规则的一个例外是使用CURRENT_TIMESTAMP作为TIMESTAMP列的默认值。)

作为替代方案,您可以使用TRIGGER在插入或更新行时为列设置值。

例如,在BEFORE INSERT FOR EACH ROW触发器中,您可以从为其他列提供的值和/或从其他表中查询数据执行计算。


修改

对于问题的EDIT中给出的示例,触发器定义的示例起点:

CREATE TRIGGER mytable_bi 
BEFORE INSERT ON mytable 
FOR EACH ROW
BEGIN
  SET NEW.percentage = (100.0 * NEW.marks) / NULLIF(NEW.total_marks,0);
END

答案 1 :(得分:0)

触发解决方案很棒,但是我来到这里的情况略有不同,而且解决方案不是我想要的。

我使用的默认值是唯一一次将新列添加到表中。在任何其他情况下,我将不会使用该默认值。所以我不想要触发。

我认为在这种情况下,唯一的选择是将值默认为0(或任何特定值)。然后使用计算所需的值更新所有这些新插入的0。

最后,将新列的默认值更新为从现在开始所需的任何内容。