在mysql中创建表,其中一列包含另外两列的值的总和

时间:2011-07-24 07:28:11

标签: mysql create-table

在mysql中是否可以创建一个包含两列值的列的表?像这样的东西:

create table test1 (
    number1 int,
    number2 int,
    total int DEFAULT (number1+number2)
);

或者像这样:

CREATE TABLE `Result` (
    `aCount` INT DEFAULT 0,
    `bCount` INT DEFAULT 0,
    `cCount` =  `aCount` + `bCount`
);

4 个答案:

答案 0 :(得分:12)

不可能完全这样做,但您可以根据组合它们的查询创建视图:

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

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

答案 1 :(得分:5)

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

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

如果您希望行发生UPDATES,请务必添加ON UPDATE触发器。

答案 2 :(得分:3)

我也有这个问题。从Edgar Velasquez的回答和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 5.6.22。

答案 3 :(得分:0)

小修:

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