2017-04-23 110 views
1

我目前有一個表,有4列 - valueone,valuetwo,valuethree和additioncolumn。我想知道如何使additioncolumn store增加valueone + valuetwo + valuethree。計算MYSQL列

我是MySQL新手,嘗試了一些我在網上找到的語法,但仍然沒有任何區別。

CREATE TABLE `calculation` (
    `valueone` int(11) NOT NULL, 
    `valuetwo` int(11) NOT NULL, 
    `valuethree` int(11) NOT NULL, 
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `additioncolumnn` int(11) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; 

INSERT INTO `calculation` VALUES (10,10,10,1,0),(20,20,20,2,0); 

值0應該是第一行30和第二行60。

回答

1

如果您使用MySQL 5.7,則可以使用生成的列。見https://dev.mysql.com/doc/refman/5.7/en/create-table-generated-columns.html

CREATE TABLE `calculation` (
    `valueone` int(11) NOT NULL, 
    `valuetwo` int(11) NOT NULL, 
    `valuethree` int(11) NOT NULL, 
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `additioncolumnn` int(11) AS (`valueone`+`valuetwo`+`valuethree`), 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; 

如果你使用MySQL的舊版本,他們推出生成列的功能之前,你必須使用觸發器:

CREATE TRIGGER CalcOnInsert BEFORE INSERT ON calculation 
FOR EACH ROW 
    SET NEW.additionalcolumn = NEW.valueone + NEW.valuetwo + NEW.valuethree; 

CREATE TRIGGER CalcOnUpdate BEFORE UPDATE ON calculation 
FOR EACH ROW 
    SET NEW.additionalcolumn = NEW.valueone + NEW.valuetwo + NEW.valuethree; 
0

我建議這樣做的查看:

create view v_calculation as 
    select c.*, (valueone + valuetwo + valuethree) as additioncolumn 
    from calculation c; 

當您使用該視圖時,會自動計算該值。因此,它始終是最新的。

如果您確實存儲了該值,則需要一個觸發器以在其中某個基礎列發生更改時使其保持最新狀態。這對於插入和更新來說是一個麻煩和額外的開銷。

正如Bill所指出的,最新版本的MySQL確實支持生成的列,所以這是最好的解決方案。