有沒有一種方法可以使用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