2011-07-24 137 views

回答

11

这是不可能做到这一点完全是,但你可以根据它结合了他们一个查询创建视图:

CREATE VIEW `my_wacky_view` AS 
SELECT `number1`, `number2`, `number1` + `number2` AS `total` 
FROM `test1`; 

我会避免实际将组合数据存储在表中,除非您要运行大量查询来引用WHERE子句中的组合数据。

+0

我怀疑使用查询缓存可以很好地服务很多读取。虽然,首先测量:) – spacediver

+0

+1意见低估恕我直言。我非常喜欢他们捕获色谱柱计算的方式,而不是在每次选择时重复它。他们也很好地堆叠(即查看视图等)。 – Bohemian

+1

我总是在我的查询中使用像这样的VIEW或'SELECT num1 + num2 FROM test'。考虑计算列(或在MySQL中使用触发器)会在表增长太大(数百万行)并且查询开始变慢之后进行。或者如果计算非常复杂而不是简单的加法/乘法。 –

4

您可以在表上创建一个触发器,以便MySQL每计算一次INSERT发生在您的test1表上就会计算并自动插入该列值。使表:

create table test1 (
    number1 int, 
    number2 int, 
    number3 int 
); 

然后创建一个触发的触发

CREATE TRIGGER triggername AFTER INSERT 
ON test1 
FOR EACH ROW 
UPDATE test1 SET NEW.number3=NEW.number1+NEW.number2 

MySQL文档: http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html

确保添加了ON UPDATE触发器,以及如果你期望的更新发生在行。

0

小FIX:

CREATE TRIGGER triggername BEFORE INSERT 
ON test1 
FOR EACH ROW 
SET NEW.number3=NEW.number1+NEW.number2 
+0

为什么这被认为是一个修复? – 10basetom

3

我有这个问题为好。从埃德加·贝拉斯克斯”答案在这里,而答案this question,我偶然发现了这个咒语:

CREATE TRIGGER insert_t BEFORE INSERT 
ON test1 
FOR EACH ROW 
SET NEW.number3=NEW.number1+NEW.number2; 

CREATE TRIGGER insert_t_two BEFORE UPDATE 
ON test1 
FOR EACH ROW 
SET NEW.number3=NEW.number1+NEW.number2; 

这对我的作品在MySQL 22年6月5日。

相关问题