你们如何升级你的游戏数据库?我的意思是在你的桌子上添加新栏目,比如说我们有一个经常变化的玩家表。出于某种原因,我不想登录数据库服务器到升级它。我想在游戏服务器启动时写一个脚本文件来升级它。好了,补丁脚本文件看起来像下面这样:
drop PROCEDURE IF EXISTS dbpatch;
DELIMITER ;;
create PROCEDURE dbpatch()
declare exit HANDLER for SQLEXCEPTION ROLLBACK;
BEGIN
start TRANSACTION;
// sql sentence
update version set v = versionnum;
commit;
end;;
DELIMITER;
call dbpatch();
drop PROCEDURE if EXISTS dbpatch;
问题是我放入dbpatch的alter table语句将结束当前活动事务并根据mysql doc隐式提交(https://dev.mysql.com/doc/refman/5.0/en/implicit-commit.html),this可能会导致部分成功并且无法回滚。例如,我得到了一个表A和我想在此表中添加三个新列' a'' b'' c'但是表A已经有了列' c'。修补过程将通过sqlexception终止,但是列'和' b'将添加到talbe AI希望它可以回滚而不是部分成功。然后我用谷歌搜索,有一些方法可以解决,但他们倾向于创建一个临时表来破解它。 这种方式对我来说不起作用,因为我在表中有一些记录,如果我这样做,我必须来回移动记录,这更容易出错。任何想法如何解决?任何帮助将不胜感激。我们目前的mysql版本是5.5.27。