有没有一种方法可以使用MySQL的默认值属性(即列定义的DEFAULT
子句)基于同一表或不同表中某些其他列的值执行计算?在默认MySQL值中执行计算
我们可以设置任何列的静态默认值,但我们可以执行计算或查询其他表的数据?
编辑
比方说,列A表marks
和其他与total_marks
和第三列percentage
。如何设置percentage
的缺省值以从前两列计算
有没有一种方法可以使用MySQL的默认值属性(即列定义的DEFAULT
子句)基于同一表或不同表中某些其他列的值执行计算?在默认MySQL值中执行计算
我们可以设置任何列的静态默认值,但我们可以执行计算或查询其他表的数据?
编辑
比方说,列A表marks
和其他与total_marks
和第三列percentage
。如何设置percentage
的缺省值以从前两列计算
否。DEFAULT子句的值必须是常量。 (该一个例外是使用CURRENT_TIMESTAMP
作为用于TIMESTAMP
列的默认值。)
作为替代方案,可以使用触发器来当一行被插入或更新的一列设置的值。
例如,在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。
最后,将该新列的默认值更新为现在需要的值。
是的。如果你提供更多的信息,也许我们可以给你更多的想法。 – Kermit