sql >> Database teknologi >  >> RDS >> Mysql

Hurtig nem måde at migrere SQLite3 til MySQL?

Alle lader til at starte med et par greps og perl-udtryk, og du får sådan set noget, der virker til dit bestemte datasæt, men du aner ikke, om det er importeret dataene korrekt eller ej. Jeg er seriøst overrasket over, at ingen har bygget et solidt bibliotek, der kan konvertere mellem de to.

Her er en liste over ALLE forskelle i SQL-syntaks, som jeg kender til mellem de to filformater:Linjerne der starter med:

  • BEGIN TRANSAKTIONEN
  • KOMMITTER
  • sqlite_sequence
  • OPRET UNIKT INDEKS

bruges ikke i MySQL

  • SQLite bruger CREATE TABLE/INSERT INTO "table_name" og MySQL bruger CREATE TABLE/INSERT INTO table_name
  • MySQL bruger ikke anførselstegn i skemadefinitionen
  • MySQL bruger enkelte anførselstegn for strenge inde i INSERT INTO klausuler
  • SQLite og MySQL har forskellige måder at undslippe strenge inde i INSERT INTO klausuler
  • SQLite bruger 't' og 'f' for booleans bruger MySQL 1 og 0 (et simpelt regex for dette kan mislykkes, når du har en streng som:'Det gør jeg, du gør ikke' inde i din INSERT INTO )
  • SQLLite bruger AUTOINCREMENT , MySQL bruger AUTO_INCREMENT

Her er et meget grundlæggende hacket perl-script, som virker for min datasæt og kontrollerer for mange flere af disse forhold end andre perl-scripts, jeg fandt på nettet. Nu garanterer, at det vil fungere for dine data, men du er velkommen til at ændre og skrive tilbage her.

#! /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. Beregning af antal hele måneder mellem to datoer i SQL

  2. Sådan bruges semantisk søgning i SQL Server

  3. Få den første mandag i en måned i SQLite

  4. 12 almindeligt anvendte SQL-operatører