有没有办法使用MySQL的默认值属性(即列定义的DEFAULT
子句)基于相同或不同表中某些其他列的值执行计算?
我们可以为任何列设置静态默认值,但我们可以执行计算或查询其他表的数据吗?
修改
我们假设一个表格的列为marks
,其他的列为total_marks
,第三列为percentage
。如何设置要从前两列计算的percentage
的默认值
答案 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。
最后,将新列的默认值更新为从现在开始所需的任何内容。