2

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

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

编辑

比方说一个表,其中列 formarks和其他列total_marks,第三列percentage。如何设置percentage从前两列计算的默认值

4

2 回答 2

9

不可以。DEFAULT 子句的值必须是常数。(此规则的一个例外是将CURRENT_TIMESTAMP用作列的默认值TIMESTAMP。)

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

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


编辑

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

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
于 2012-08-28T16:24:16.160 回答
0

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

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

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

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

于 2014-09-08T15:20:13.547 回答