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

Sådan automatiseres migrering (skema og data) til PHP/MySQL-applikation

Jeg har et "Schema" objekt, som jeg bruger - men du kunne gøre det samme uden klasser..

Det, du vil gøre, er at oprette en 'db_schema_versions ' tabel:

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

Når din database kan spore, hvilken version # den er på - kan den udføre SQL-opgraderinger automatisk.

Du bør låse din skematabel, mens du opgraderer skemaet. På denne måde vil du ikke have to anmodninger på samme tidspunkt, når du prøver at opgradere dit skema.

Så - hold styr på den version, du opgraderer fra - byg en stor switch - noget som dette:

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. Indsaml skemastatistik ved hjælp af FND_STATS i EBS 11i og R12

  2. MariaDB JSON_UNQUOTE() Forklaret

  3. Kan vi omfordele Oracle tools.jar?

  4. Eksempel på Oracle IF-tilstand