是否可以在MySQL中使用表达式作为默认值创建列?

时间:2012-06-02 14:49:29

标签: mysql sql

如何在MySQL中实现这一点:

CREATE TABLE employee (
  employeemonthly DECIMAL(10,2), 
  employeeyearly DECIMAL(10,2) DEFAULT employeemonthly*12
);

3 个答案:

答案 0 :(得分:4)

使用插入触发器。像这样的东西

DELIMITER |

CREATE TRIGGER default_yearly BEFORE INSERT ON employee
  FOR EACH ROW BEGIN   
    SET NEW.employeeyearly = NEW.employeemonthly * 12;
  END;
|

DELIMITER ;

答案 1 :(得分:3)

我会使用view

CREATE VIEW vemployees AS
  SELECT e.employeemonthly,
         e.employeemonthly * 12 AS employeeyearly
    FROM EMPLOYEE e

...因为很少需要将存储空间用于容易计算的值。否则,使用函数或简单地将表达式写入您需要的任何查询/存储过程。

真正取决于:

  • 您需要多久访问一次此数据
  • 获得所需结果的操作有多复杂

我建议从不存储值开始。如果性能成为问题,那么为值存储专用一列 - 而不是之前。那时,当你可以使用(伪代码)时,触发器对我来说有点矫枉过正:

INSERT INTO employee 
  (...employeemonthly, employeeyearly, ...)
VALUES
  (...@employeemonthly, @employeemonthly * 12, ...

答案 2 :(得分:2)

使用trigger for the insert event,使用NEW访问新记录数据并设置适当的值。