sql >> Databáze >  >> RDS >> Mysql

Jak automatizovat migraci (schéma a data) pro aplikaci PHP/MySQL

Mám objekt "Schema", který používám - ale totéž můžete udělat bez tříd..

Co chcete udělat, je vytvořit 'db_schema_versions ' tabulka:

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

Poté, co vaše databáze může sledovat, na jaké verzi # je - může automaticky provádět aktualizace SQL.

Při upgradu schématu byste měli uzamknout tabulku schémat. Tímto způsobem nebudete mít dva požadavky ve stejnou chvíli při pokusu o upgrade vašeho schématu.

Takže – sledujte verzi, ze které upgradujete – postavte velký přepínač – něco takového:

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


  1. Jak optimalizovat databázi webových stránek

  2. Procedura očekává parametr, který nebyl zadán

  3. Instalace ukázek databáze AdventureWorks na Microsoft SQL Server 2012

  4. Sloučit překrývající se časové intervaly