php - 为软件开发人员创建 PHP/MySQL 升级脚本的最佳方法是什么?

标签 php mysql upgrade

我是一名 PHP 软件开发人员,正在寻找解决这个问题的最佳解决方案。我正在创建一个脚本,该脚本将来会发布新版本,其中包括新功能、错误修复等。我知道如何在升级脚本中进行代码更改,但是我正在开发的脚本使用 MySQL 将数据存储在多个表中.

现在问题来了,我已经想出了如何为初始版本制作安装脚本,但是制作升级脚本的最佳解决方案/方法是什么,可以将任何以前的版本升级到最新版本版本?最新版本有新的 MySQL 表(不是问题),但它也改变了数据库结构(新列、删除列等)。我将在下面创建一个场景以更好地描述我担心的事情。

v0.1.0 - Initial Release

v0.1.1 - Has a new database table and some fields added to the table structure

v0.2.0 - Has more new fields added to different tables

My concern is the the upgrade v0.1.0 > v0.2.0 because there were changes between the two versions.

更新 我可能已经提到我使用 GitHub 作为单独的代码 VCS。所有代码更改都保存在那里,并且在代码更改的安装或升级脚本中,我只是计划覆盖用户的当前文件,因为它们不应该在类/函数文件中包含任何数据。

最佳答案

根据我的经验,最好的方法是在 MySQL 中创建一个版本控制表,其中包括应用程序的版本号以及任何更改数据库结构的查询。所以本质上:

CREATE TABLE versions (
    app_version DOUBLE NOT NULL,
    query TEXT,
    created TIMESTAMP NOT NULL 
);

通过我们的安装脚本,我们记录了我们的初始应用程序版本和目标应用程序版本,并选择需要执行的所有查询才能正常工作。

SELECT query FROM versions WHERE app_version > {$initialAppVersion} AND app_version <= {$destinationAppVersion} ORDER BY created ASC;

在 PHP 中:

foreach ($resultset AS $row) {
    $stmt = $db->prepare($row['query']);
    try {
       $stmt->execute();
    } catch (Exception $e) { /* handle exception */ }
}

关于php - 为软件开发人员创建 PHP/MySQL 升级脚本的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5382437/

相关文章:

android - 应用程序升级后丢失 SQLite 数据库数据 - 怎么会这样?

android - GreenDao - Android - OnUpgrade 未被调用(加密数据库)

javascript - 将 getJSON 与变量一起使用

php - php:onchange选项选择更新总计

MySQL 5.1.* 奇怪的触发器复制行为

mysql - Linq-查询主体必须以 C# 中的 select 子句或 group 子句结尾

android - 如何使用 SQLiteAssetHelper 升级带有新行的数据库版本

php - 远程服务器的 Xdebug 未连接

php - 如何在 Heroku 中将 Mysql 命令与 ClearDB 一起使用?

php - 我想在我的角色扮演游戏上创建股票市场。对公式有什么想法吗?