sql >> Databáze >  >> RDS >> Mysql

Rychlý a snadný způsob migrace SQLite3 na MySQL?

Zdá se, že každý začíná s několika výrazy greps a perl a vy dostanete něco, co funguje pro vaši konkrétní datovou sadu, ale nemáte ponětí, zda jsou data importována správně nebo ne. Vážně mě překvapuje, že nikdo nevybudoval solidní knihovnu, která by mezi nimi mohla převádět.

Zde je seznam VŠECH rozdílů v syntaxi SQL, o kterých vím mezi těmito dvěma formáty souborů:Řádky začínající:

  • ZAČNĚTE TRANSAKCI
  • POTVRDIT
  • sqlite_sequence
  • VYTVOŘTE UNIKÁTNÍ INDEX

se nepoužívají v MySQL

  • SQLite používá CREATE TABLE/INSERT INTO "table_name" a MySQL používá CREATE TABLE/INSERT INTO table_name
  • MySQL nepoužívá v definici schématu uvozovky
  • MySQL používá jednoduché uvozovky pro řetězce uvnitř INSERT INTO klauzule
  • SQLite a MySQL mají různé způsoby escapování řetězců uvnitř INSERT INTO klauzule
  • SQLite používá 't' a 'f' pro booleany používá MySQL 1 a 0 (Jednoduchý regulární výraz pro to může selhat, když máte v INSERT INTO řetězec jako:'Já ano, ty ne' )
  • SQLLite používá AUTOINCREMENT , MySQL používá AUTO_INCREMENT

Zde je velmi základní hacknutý perl skript, který funguje pro my dataset a kontroluje mnohem více těchto podmínek, než jiné skripty v perlu, které jsem našel na webu. Nu zaručuje, že to bude fungovat pro vaše data, ale můžete je upravit a zveřejnit zde.

#! /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. Hodnoty oddělené čárkou s dotazem SQL

  2. Jak bezpečně ukládat hesla do databáze?

  3. Typy dat SQL VARCHAR Co dělat a co nedělat pro rychlejší databáze

  4. Optimalizace databáze:Indexy