DEFAULT
有没有办法使用MySQL 的 Default Value 属性(即列定义上的子句)基于相同或不同表中其他列的值执行计算?
我们可以为任何列设置静态默认值,但我们可以执行计算或查询其他表的数据吗?
编辑
比方说一个表,其中列 formarks
和其他列total_marks
,第三列percentage
。如何设置percentage
从前两列计算的默认值
不可以。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
触发解决方案很棒,但我来到这里的情况略有不同,那个解决方案不是我想要的。
我将默认值用于唯一一次将新列添加到表中。在任何其他情况下,我都不会使用该默认值。所以我不想触发。
我认为在这种情况下,唯一的选择是将值默认为 0(或任何特定值)。然后用计算所需的值更新所有这些新插入的 0。
最后,从现在开始将该新列的默认值更新为所需的值。