Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да автоматизирате миграцията (схема и данни) за PHP/MySQL приложение

Имам обект "Схема", който използвам - но можете да направите същото без класове...

Това, което искате да направите, е да създадете '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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Laravel валидира уникален, ако идентификаторът е същият

  2. Как да съхранявате JSON данни в MySQL

  3. MySQL Query не използва индекс в присъединяването на таблица

  4. localhost срещу 127.0.0.1 в mysql_connect()

  5. Използване на 'OR' между клаузата HAVING и WHERE в MySQL?