2

Fine在 MySQL 表中有一个派生属性,其值为

(CurrentDate - DueDate) * 0.5

CurrentDate并以格式DueDate存储在表中。Date

如何为Fine表中的属性指定此公式

CREATE TABLE IF NOT EXISTS Loan (
         loanID    INT UNSIGNED  NOT NULL AUTO_INCREMENT,
         BorrowDate  DATE       DEFAULT NULL,
         ReturnDate         DATE       DEFAULT NULL,
         DueDate         DATE       DEFAULT NULL,
--- Fine... What do I write for Fine here-------
         userID    INT UNSIGNED  NOT NULL,           
         itemID    INT UNSIGNED  NOT NULL,      
         PRIMARY KEY  (loanID) ,
         FOREIGN KEY (userID) REFERENCES LibraryUser (userID),
         FOREIGN KEY (itemID) REFERENCES Items (itemID)
       );
4

1 回答 1

5

您不能在 mysql 中“按原样”拥有计算列。

三种解决方案:

第一:使用触发器

参见例如从另一列计算的列

第二:创建一个视图(Fine 将只存在于您的视图中,而不存在于您的主表中)。

视图可以毫无问题地包含计算列。

CREATE VIEW v_computedLoan AS
SELECT
loanID, 
BorrowDate, 
ReturnDate, 
CurrentDate,
--etc
(CurrentDate-DueDate)*0.5 as Fine
FROM Loan

第三:将计算排除在您的数据库之外。仅在您的查询中使用它。

编辑:如果 CurrentDate 确实与 CURRENT_DATE() 函数相同(然后应该有所不同),则带有触发器的解决方案将不起作用,并且 CurrentDate 不应存储在任何表中(但您仍然可以在视图中使用它)。

于 2013-01-25T16:41:09.857 回答