2013-05-13 71 views
3

在mysql數據庫中可以使用版本控制系統嗎? 或者,有沒有已經實施的版本控制系統?mysql中是否有任何版本控制?

我想說例如爲:SELECT FROM foo的酒吧,在那裏版本= X

Whereeby版本是一個MySQL的內部科拉姆與去年更新日期。

+0

AFAIK不,在任何RDBMS中都沒有這種東西。猜猜你應該自己添加該功能。例如,所有表中的附加「版本」列(至少在那些需要版本控制的列中)。另外,這個VC功能應該可以在ORM級別進行管理。 – 2013-06-02 18:52:34

回答

1

你也可以定義額外的表來記錄。例如,如果你已經有一個表新聞,你可以複製它作爲news_log。然後添加用於記錄數據的列,如:修改日期,操作(更新,刪除,添加)等。

接下來,您將在原始表上定義觸發器,這些觸發器會將數據插入到日誌記錄表中。例如,當您更新新聞表中的記錄時,將執行您定義的news_log_trigger,並將新記錄插入到new_log中,其操作值爲「UPDATE」,當前日期爲修改日期。

對MySQL的更多信息觸發: http://dev.mysql.com/doc/refman/5.0/en/triggers.html

如果你想爲你可以problably寫一個通用的存儲過程來執行實際的記錄每一個項目做到這一點。這樣你可以重用它,你只需要定義觸發器和記錄表。

3

很晚的響應...類似於Ruben的建議,我設置了觸發器來更新版本控制表,以在每次有INSERT,UPDATE & DELETE時遞增版本號。

我奠定了我的網站上的步驟mradamfrancis.tumblr.com

**更新**
我決定使用觸發器來幫助版本控制。這是如何...

我有一個表包含播放器,如果有變化(插入,刪除或更新)我想在我的version_control表中增加版本號。

這是VERSION_CONTROL表的外觀: VERSION_ID(鍵),TABLE_NAME(VARCHAR),版本(整數)

我然後創建對球員表3級的觸發器,一個INSERT,DELETE & UPDATE。

INSERT:

delimiter // 
    CREATE TRIGGER `player_table_INSERT` AFTER INSERT ON `players` 
    FOR EACH ROW BEGIN 
    UPDATE version_control SET version=version+1 WHERE table_name=’players’; 
    END;// 
    delimiter ; 

DELETE:

delimiter // 
    CREATE TRIGGER `player_table_DELETE` AFTER DELETE ON `players` 
    FOR EACH ROW BEGIN 
    UPDATE version_control SET version=version+1 WHERE table_name=’players’; 
    END;// 
    delimiter ; 

UPDATE:

delimiter // 
    CREATE TRIGGER `player_table_UPDATE` AFTER UPDATE ON `players` 
    FOR EACH ROW BEGIN 
    UPDATE version_control SET version=version+1 WHERE table_name=’players’; 
    END;// 
    delimiter ; 

**我對扳機的每一部分的額外的SQL語句,因此我我使用了分隔符(第一行和最後一行)以及BEGIN & END。

+0

很好的答案。作爲一般規則,儘管在這裏儘可能多地複製答案,而不是僅僅鏈接到另一個網站會更好;這樣的答案仍然會很好,即使鏈接因任何原因而死亡 – yochannah 2013-12-30 18:05:27

+0

感謝您的提示yochannah(第一次回答)。我會更新我的原始回覆 – adamf 2013-12-30 18:39:26

相關問題