Mysql
 sql >> Database >  >> RDS >> Mysql

Come automatizzare la migrazione (schema e dati) per l'applicazione PHP/MySQL

Ho un oggetto "Schema" che uso, ma potresti fare lo stesso senza classi..

Quello che vuoi fare è creare un 'db_schema_versions ' tabella:

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

Dopo che il tuo database può tenere traccia della versione # su cui è installato, può eseguire automaticamente gli aggiornamenti SQL.

Dovresti bloccare la tabella dello schema durante l'aggiornamento dello schema. In questo modo non avrai due richieste contemporaneamente che tentano di aggiornare il tuo schema.

Quindi - tieni traccia della versione da cui stai aggiornando - costruisci un grande interruttore - qualcosa del genere:

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