Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara mengotomatiskan migrasi (skema dan data) untuk aplikasi PHP/MySQL

Saya memiliki objek "Skema" yang saya gunakan - tetapi Anda dapat melakukan hal yang sama tanpa kelas..

Yang ingin Anda lakukan adalah membuat 'db_schema_versions ' tabel:

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

Setelah basis data Anda dapat melacak versi # apa - ia dapat melakukan pemutakhiran SQL secara otomatis.

Anda harus mengunci tabel skema Anda saat memutakhirkan skema. Dengan cara ini Anda tidak akan memiliki dua permintaan pada saat yang sama yang mencoba meningkatkan versi skema Anda.

Jadi - pantau terus versi yang Anda tingkatkan versinya - buat sakelar besar - kira-kira seperti ini:

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. Mysql:Lakukan NOT EXISTS. Apakah mungkin untuk meningkatkan kinerja?

  2. PHP &MySQL:Mengubah TIMESTAMP Tersimpan menjadi Zona Waktu Lokal Pengguna

  3. Menggunakan bidang virtual di cakePHP 2.x

  4. Mengapa menggunakan bin2hex saat memasukkan data biner dari PHP ke MySQL?

  5. Cara membuat tabel berdasarkan Kumpulan Hasil JDBC