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

Cara cepat dan mudah untuk memigrasi SQLite3 ke MySQL?

Semua orang tampaknya memulai dengan beberapa ekspresi grep dan perl dan Anda agak mendapatkan sesuatu yang berfungsi untuk kumpulan data khusus Anda, tetapi Anda tidak tahu apakah itu mengimpor data dengan benar atau tidak. Saya sangat terkejut tidak ada yang membangun perpustakaan yang solid yang dapat mengkonversi di antara keduanya.

Berikut daftar SEMUA perbedaan sintaks SQL yang saya ketahui antara dua format file:Baris yang dimulai dengan:

  • MULAI TRANSAKSI
  • KOMITMEN
  • sqlite_sequence
  • BUAT INDEKS UNIK

tidak digunakan di MySQL

  • SQLite menggunakan CREATE TABLE/INSERT INTO "table_name" dan MySQL menggunakan CREATE TABLE/INSERT INTO table_name
  • MySQL tidak menggunakan tanda kutip di dalam definisi skema
  • MySQL menggunakan tanda kutip tunggal untuk string di dalam INSERT INTO klausa
  • SQLite dan MySQL memiliki cara berbeda untuk melepaskan string di dalam INSERT INTO klausa
  • SQLite menggunakan 't' dan 'f' untuk boolean, MySQL menggunakan 1 dan 0 (regex sederhana untuk ini bisa gagal ketika Anda memiliki string seperti:'I do, you don't' di dalam INSERT INTO Anda )
  • SQLLite menggunakan AUTOINCREMENT , MySQL menggunakan AUTO_INCREMENT

Berikut adalah skrip perl yang diretas yang sangat mendasar yang berfungsi untuk saya dataset dan memeriksa lebih banyak dari kondisi ini yang saya temukan di skrip perl lain di web. Nu menjamin bahwa ini akan berfungsi untuk data Anda, tetapi jangan ragu untuk memodifikasi dan memposting kembali di sini.

#! /usr/bin/perl

while ($line = <>){
    if (($line !~  /BEGIN TRANSACTION/) && ($line !~ /COMMIT/) && ($line !~ /sqlite_sequence/) && ($line !~ /CREATE UNIQUE INDEX/)){
        
        if ($line =~ /CREATE TABLE \"([a-z_]*)\"(.*)/i){
            $name = $1;
            $sub = $2;
            $sub =~ s/\"//g;
            $line = "DROP TABLE IF EXISTS $name;\nCREATE TABLE IF NOT EXISTS $name$sub\n";
        }
        elsif ($line =~ /INSERT INTO \"([a-z_]*)\"(.*)/i){
            $line = "INSERT INTO $1$2\n";
            $line =~ s/\"/\\\"/g;
            $line =~ s/\"/\'/g;
        }else{
            $line =~ s/\'\'/\\\'/g;
        }
        $line =~ s/([^\\'])\'t\'(.)/$1THIS_IS_TRUE$2/g;
        $line =~ s/THIS_IS_TRUE/1/g;
        $line =~ s/([^\\'])\'f\'(.)/$1THIS_IS_FALSE$2/g;
        $line =~ s/THIS_IS_FALSE/0/g;
        $line =~ s/AUTOINCREMENT/AUTO_INCREMENT/g;
        print $line;
    }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Peringatan:mysqli_query() mengharapkan parameter 1 menjadi mysqli, sumber daya diberikan

  2. Menukar nilai kolom di MySQL

  3. Praktik Terbaik dalam Penskalaan Basis Data:Bagian 1

  4. Membuat pengguna di MySQL

  5. Perbedaan antara dua pendekatan tabel bergabung ini?