php - 如何为 PHP/MySQL 应用程序自动迁移(架构和数据)

标签 php mysql deployment migration

我有一个 PHP/MySQL 应用程序。我正在寻找一种自动方式升级应用程序背后的数据库。 升级后我不需要兼容旧版本。

我已阅读 jeff'sK. Scott Allen's这方面的文章。

我仍然不确定如何为 PHP/MySQL 应用程序实现这一点。

有没有什么简单又好的流程呢?

最佳答案

我有一个我使用的“Schema”对象——但是你可以在没有类的情况下做同样的事情..

您要做的是创建一个“db_schema_versions”表:

CREATE TABLE db_schema_versions (
  `table` varchar(255) NOT NULL PRIMARY KEY, 
  `version` INT NOT NULL
)

在您的数据库可以跟踪它所处的版本之后 - 它可以自动进行 SQL 升级。

您应该在升级模式时锁定您的模式表。这样您就不会同时有两个请求来尝试升级您的架构。

所以 - 跟踪您要升级的版本 - 构建一个大开关 - 像这样:

class SNTrack_Db_Schema extends MW_Db_Schema_Abstract {
  protected $table = "sntrack_db_schema";
  protected $version = 5;

  protected function upgrade($fromVersion) {
    // don't break
    switch($fromVersion) {
      case 0:
        $this->db->query('CREATE TABLE sntrack_inbound_shipment (
            `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
            `from` VARCHAR(255) NOT NULL,
            `date` DATE NOT NULL,
            `invoice` VARCHAR(255) NOT NULL,
            `notes` TEXT
          )');
        $this->setVersion(1);
      case 1:
        $this->db->query('ALTER TABLE sntrack_details ADD `shipment_id` INT');
        $this->db->query('ALTER TABLE sntrack_product ADD `inventory` INT NOT NULL DEFAULT 0');
        $this->db->query('CREATE TABLE sntrack_inventory_shipment (
            `shipment_id` INT NOT NULL,
            `product_id` INT NOT NULL,
            `qty` INT NOT NULL,
            PRIMARY KEY (`shipment_id`, `product_id`)
          )');
        $this->setVersion(2);
...etc

关于php - 如何为 PHP/MySQL 应用程序自动迁移(架构和数据),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/825787/

相关文章:

php - 如何使用 PEAR Mail 工厂显式禁用 TLS?

php - Yii2前后端链接(高级模板)

php - 在 mysql 数据库中使用 pdo 保存复选框值

deployment - 金丝雀发布策略与蓝/绿发布策略

deployment - WebSphere Application Server Network Deployment 的错误 ADMA5026E

php - 我如何选择字段包含精确整数的 mysql 行到字符串中?

用于高级搜索的 php sql 查询

php - 尝试找出 PHP PDO 准备好的语句和占位符。 MySQL语句的 "IN"子句中的占位符

java - 如何解析包含XML结构的字段?

java - 如何告诉 NetBeans 我的 Tomcat "home"在哪里?