sql >> Base de Datos >  >> RDS >> Mysql

Cómo automatizar la migración (esquema y datos) para la aplicación PHP/MySQL

Tengo un objeto "Esquema" que uso, pero podrías hacer lo mismo sin clases.

Lo que quieres hacer es crear un 'db_schema_versions ' tabla:

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

Después de que su base de datos pueda rastrear en qué versión # está, puede hacer actualizaciones de SQL automáticamente.

Debe bloquear su tabla de esquema mientras actualiza el esquema. De esta manera, no tendrá dos solicitudes al mismo tiempo tratando de actualizar su esquema.

Por lo tanto, realice un seguimiento de la versión desde la que está actualizando, cree un cambio grande, algo como esto:

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