2013-08-06 103 views
1

嘗試在表中創建一個將獲得另一個字段的舊值的字段。我的表非常類似:MySQL數據庫中的歷史字段

------------ -------------------- ------------------------ 
| id int(10) | price decimal(5,2) | price_old decimal(5,2) | 
---------------------------------------------------------- 

什麼我試圖得到的是price字段的值在price_old領域當前記錄的ON UPDATE被複制。

是否有可能只用mysql來實現這一點?

PS:包含在該單元中的數據並不重要。用法是存儲項目的前一個價格,然後顯示它如何變化。我只需要最後的值,而不是表格條目的完整歷史記錄。 (我的MySQL服務器是5.0,如果這很重要)

+1

對不起,我會編輯。我的意思是'price_old'字段中的'price'字段 –

回答

1

在更新規則上使用triggers。有設定價格的價值price_old

CREATE TRIGGER `update_price_old` 
    BEFORE UPDATE ON `table_name` FOR EACH ROW 
    BEGIN 
    UPDATE `table_name` SET price_old = OLD.price where OLD.id = id; 
    END 
+0

請對@DwB的回答發表評論:) –

+0

立即檢查。更新了樣本。 (注意:未測試) –

4

是的,你可以使用BEFORE UPDATE觸發器(documentation)。

我認爲這個語法是正確的,但在一段時間內沒有使用MySQL,所以你可能需要玩弄它。如果它是錯誤的,你得到它的工作,請讓我知道,所以我可以編輯它。

DELIMITER $$ 
CREATE TRIGGER `price_trigger` 
BEFORE UPDATE ON `products` 
FOR EACH ROW 
BEGIN 
    IF NEW.price != OLD.price 
     SET price_old = OLD.price; 
    END IF; 
END$$ 
DELIMITER ;