2

如何在 MySQL 中实现这一点:

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

3 回答 3

4

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

DELIMITER |

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

DELIMITER ;
于 2012-06-02T14:54:03.470 回答
3

我会使用一个视图

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

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

真正取决于的是:

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

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

INSERT INTO employee 
  (...employeemonthly, employeeyearly, ...)
VALUES
  (...@employeemonthly, @employeemonthly * 12, ...
于 2012-06-02T14:59:08.173 回答
2

为插入事件使用触发器,使用 NEW 访问新记录数据并设置适当的值。

于 2012-06-02T14:52:25.733 回答