Mysql
 sql >> база данни >  >> RDS >> Mysql

Бърз лесен начин за мигриране на SQLite3 към MySQL?

Изглежда, че всеки започва с няколко израза greps и perl и вие някак си получавате нещо, което работи за вашия конкретен набор от данни, но нямате представа дали данните са импортирани правилно или не. Сериозно съм изненадан, че никой не е изградил солидна библиотека, която може да конвертира между двете.

Ето списък на ВСИЧКИ разлики в синтаксиса на SQL, за които знам между двата файлови формата:Редовете, започващи с:

  • ЗАПОЧНЕТЕ ТРАНЗАКЦИЯ
  • ЗАДАВАНЕ
  • sqlite_sequence
  • СЪЗДАВАЙТЕ УНИКАЛЕН ИНДЕКС

не се използват в MySQL

  • SQLite използва CREATE TABLE/INSERT INTO "table_name" и MySQL използва CREATE TABLE/INSERT INTO table_name
  • MySQL не използва кавички в дефиницията на схемата
  • MySQL използва единични кавички за низове вътре в INSERT INTO клаузи
  • SQLite и MySQL имат различни начини за избягване на низове в INSERT INTO клаузи
  • SQLite използва 't' и 'f' за булеви, MySQL използва 1 и 0 (прост регулярен израз за това може да се провали, когато имате низ като:'I do, you don't' във вашия INSERT INTO )
  • SQLLite използва AUTOINCREMENT , MySQL използва AUTO_INCREMENT

Ето един много основен хакнат perl скрипт, който работи за моя набор от данни и проверява за много повече от тези условия, които други скриптове на perl намерих в мрежата. Nu гарантира, че ще работи за вашите данни, но не се колебайте да променяте и публикувате отново тук.

#! /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. Как да показвате стойностите на редове като колони в MySQL

  2. Как мога да възстановя пълните привилегии на root потребителя на MySQL?

  3. WAMP/MySQL грешки не са на правилния език

  4. Как да използвам GROUP BY за конкатенация на низове в MySQL?

  5. Как да замените част от низ в MySQL