Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak zautomatyzować migrację (schematu i danych) dla aplikacji PHP/MySQL

Mam obiekt "Schema", którego używam - ale możesz zrobić to samo bez klas.

To, co chcesz zrobić, to utworzyć „db_schema_versions” ' tabela:

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

Po tym, jak twoja baza danych będzie mogła śledzić wersję #, w której się znajduje - może automatycznie wykonywać aktualizacje SQL.

Podczas uaktualniania schematu należy zablokować tabelę schematu. W ten sposób nie będziesz mieć dwóch żądań w tym samym momencie próbujących uaktualnić schemat.

Tak więc - śledź wersję, z której aktualizujesz - zbuduj duży przełącznik - coś takiego:

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. Zaznacz WSZYSTKIE pola zawierające tylko WIELKIE litery

  2. Jak zrobić wstawkę wsadową w MySQL

  3. Jaka jest właściwa konwencja nazewnictwa dla pakietów MySQL FK?

  4. indeksowanie strony html za pomocą php?

  5. Zwróć tylko jeden wiersz z tabeli skrajnej po prawej dla każdego wiersza w tabeli skrajnej po lewej stronie