3

可以使用带有 mysql 数据库的版本控制系统吗?或者,是否已经实施了版本控制系统?

我想说例如:SELECT foo FROM bar WHERE version = X

其中版本是具有最后更新日期的mysql内部列。

4

2 回答 2

3

响应很晚...类似于鲁本的建议,我设置了触发器来更新版本控制表,以在每次插入、更新和删除时增加版本号。

我在我的网站mradamfrancis.tumblr.com上列出了这些步骤

** 更新 **
我决定使用触发器来协助进行版本控制。方法如下……</p>

我有一个包含播放器的表,如果有更改(插入、删除或更新),我想增加我的 version_control 表中的版本号。

这是 version_control 表的外观:version_id (key)、table_name (varchar)、version (integer)

然后我在玩家表上创建了 3 个触发器,一个用于 INSERT、DELETE 和 UPDATE。

插入:

    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 ;

删除:

    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 ;

更新:

    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 ;

** 我在触发器的 FOR EACH 部分有额外的 SQL 语句,因此我使用了分隔符(第一行和最后一行)以及 BEGIN 和 END。

于 2013-12-30T17:47:48.843 回答
1

您还可以为日志定义额外的表。例如,如果您已经有一个表 news,您可以将其复制为 news_log。然后添加用于记录数据的列,例如:修改日期、操作(更新、删除、添加)等。

接下来,您在原始表上定义触发器,将数据插入到您的日志记录表中。例如,当您更新新闻表中的一条记录时,您定义的 news_log_trigger 将被执行,并将一条新记录插入到 new_log 中,操作值为“UPDATE”,当前日期为修改日期。

有关 mysql 触发器的更多信息:http: //dev.mysql.com/doc/refman/5.0/en/triggers.html

如果您想为每个项目执行此操作,您可能可以编写一个通用存储过程来执行实际日志记录。这样你就可以重用它,你只需要定义触发器和日志表。

于 2013-06-03T13:27:04.293 回答