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

Szybki i łatwy sposób na migrację SQLite3 do MySQL?

Wydaje się, że każdy zaczyna od kilku wyrażeń greps i perl, a ty dostajesz coś, co działa dla twojego konkretnego zestawu danych, ale nie masz pojęcia, czy dane zostały zaimportowane poprawnie, czy nie. Jestem poważnie zaskoczony, że nikt nie zbudował solidnej biblioteki, która może konwertować między nimi.

Oto lista WSZYSTKICH różnic w składni SQL, które znam między dwoma formatami plików:Wiersze zaczynające się od:

  • ROZPOCZNIJ TRANSAKCJĘ
  • POTWIERDZENIE
  • sqlite_sequence
  • UTWÓRZ UNIKALNY INDEKS

nie są używane w MySQL

  • SQLite używa CREATE TABLE/INSERT INTO "table_name" a MySQL używa CREATE TABLE/INSERT INTO table_name
  • MySQL nie używa cudzysłowów w definicji schematu
  • MySQL używa pojedynczych cudzysłowów dla ciągów znaków wewnątrz INSERT INTO klauzule
  • SQLite i MySQL mają różne sposoby ucieczki ciągów wewnątrz INSERT INTO klauzule
  • SQLite używa 't' i 'f' dla wartości logicznych MySQL używa 1 i 0 (proste wyrażenie regularne dla tego może się nie powieść, gdy masz ciąg taki jak:„Tak, nie” wewnątrz Twojego INSERT INTO )
  • SQLLite używa AUTOINCREMENT , MySQL używa AUTO_INCREMENT

Oto bardzo prosty, zhakowany skrypt perla, który działa dla mój dataset i sprawdza o wiele więcej tych warunków niż inne skrypty perla, które znalazłem w sieci. Nu gwarantuje, że będzie działać z Twoimi danymi, ale możesz je modyfikować i przesyłać z powrotem tutaj.

#! /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. Pymysql Cursor.fetchall() / Fetchone() Zwraca Brak

  2. Jak działa funkcja RTRIM() w MySQL

  3. PDO::__construct():Serwer wysłał zestaw znaków (255) nieznany klientowi. Proszę zgłosić się do programistów

  4. Jak ponownie zsynchronizować bazę danych Mysql, jeśli Master i Slave mają inną bazę danych w przypadku replikacji Mysql?

  5. Jak przekonwertować czas MySQL