可以使用带有 mysql 数据库的版本控制系统吗?或者,是否已经实施了版本控制系统?
我想说例如:SELECT foo FROM bar WHERE version = X
其中版本是具有最后更新日期的mysql内部列。
响应很晚...类似于鲁本的建议,我设置了触发器来更新版本控制表,以在每次插入、更新和删除时增加版本号。
我在我的网站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。
您还可以为日志定义额外的表。例如,如果您已经有一个表 news,您可以将其复制为 news_log。然后添加用于记录数据的列,例如:修改日期、操作(更新、删除、添加)等。
接下来,您在原始表上定义触发器,将数据插入到您的日志记录表中。例如,当您更新新闻表中的一条记录时,您定义的 news_log_trigger 将被执行,并将一条新记录插入到 new_log 中,操作值为“UPDATE”,当前日期为修改日期。
有关 mysql 触发器的更多信息:http: //dev.mysql.com/doc/refman/5.0/en/triggers.html
如果您想为每个项目执行此操作,您可能可以编写一个通用存储过程来执行实际日志记录。这样你就可以重用它,你只需要定义触发器和日志表。