2015-12-02 52 views
0

我需要在mySQL表中做簡單的數學運算。mySQL 5.7 - 計算列/觸發函數

我有表payment_tbl 與領域:正常,罰款,退款,並試圖增加提出的未決,這將是正常的+罰款+退款?

代碼payment_tbl:

create table payment_tbl (
payment_id INT (10) PRIMARY KEY AUTO_INCREMENT, 
payment_amount decimal (5,2) not null, 
payment_date DATE not null, 
normal decimal (5,2) not null, 
penalty decimal (5,2) not null, 
refund decimal (5,2) not null, 
out decimal (5,2)); 

INSERT into payment_tbl (
payment_amount, 
payment_date, 
normal, 
penalty, 
refund) 
values ('5.55', '2015-05-05', '5.55','0', '0'); 

所以我想有列了所有三次付款的總和?

回答

1

這裏是generated columns的文檔:

CREATE TABLE payment_tbl(
    payment_id INT (10) PRIMARY KEY AUTO_INCREMENT, 
    payment_amount decimal (5,2) not null, 
    payment_date DATE not null, 
    normal decimal (5,2) not null, 
    penalty decimal (5,2) not null, 
    refund decimal (5,2) not null, 
    `out` decimal (5,2) AS (normal+penalty+refund) 
); 

我修改out列的定義是3個其他列的總和。你不需要觸發器。

+0

我做過類似的嘗試,並得到相同的錯誤:錯誤1064(42000):您的SQL語法錯誤;檢查與您的MySQL服務器版本對應的手冊,以便在第8行使用'out decimal(5,2)AS(正常+罰款+退款) '附近的r ight語法 – Kalenji

+0

OUT是MySQL保留關鍵字。你必須把它放在反引號中。看到我上面更新的答案。請參閱:[MySQL中的保留關鍵字](http://dev.mysql.com/doc/refman/5.7/en/keywords.html) – Jocelyn

0

您可以使用此查詢來添加COLUMN。如果你使用PERSISTENT Query,你也可以在這個COLUMN上添加一個INDEX。

ALTER TABLE payment_tbl 
ADD COLUMN `out` DECIMAL(5,2) AS (normal + penalty + refund) VIRTUAL; 

ALTER TABLE payment_tbl 
ADD COLUMN `outp` DECIMAL(5,2) AS (normal + penalty + refund) PERSISTENT;