mysql中有任何版本控制吗?

时间:2013-05-13 12:28:28

标签: mysql controls version

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

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

Whereeby版本是具有上次更新日期的mysql内部列。

2 个答案:

答案 0 :(得分:3)

非常晚的响应......类似于Ruben的建议,我设置触发器来更新version_control表,以便每次有INSERT,UPDATE&更新时增加版本号。 DELETE

我列出了我的网站mradamfrancis.tumblr.com

上的步骤

**更新**
我决定使用触发器来协助版本控制。这是怎么......

我有一个包含播放器的表,如果有更改(INSERT,DELETE或UPDATE),我想在我的version_control表中增加版本号。

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

然后我在播放器表上创建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 ;

更新:

    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语句,因此我使用了分隔符(第1行和最后一行)以及BEGIN& END。

答案 1 :(得分:1)

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

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

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

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