为了账号安全,请及时绑定邮箱和手机立即绑定

将SQLite3迁移到MySQL的快速简便方法?

将SQLite3迁移到MySQL的快速简便方法?

有只小跳蛙 2019-08-09 14:39:20
将SQLite3迁移到MySQL的快速简便方法?有人知道将SQLite3数据库迁移到MySQL的快捷方法吗?
查看完整描述

3 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超6个赞

每个人似乎从一些greps和perl表达式开始,你有点得到一些适用于你的特定数据集的东西,但你不知道它是否正确导入数据。我很惊讶没有人建立一个可以在两者之间转换的可靠库。

这里列出了我在两种文件格式之间所知的SQL语法的所有差异:以以下列开头的行:

  • 开始交易

  • 承诺

  • sqlite_sequence

  • 创建独特的索引

在MySQL中没有使用

  • SQLlite使用CREATE TABLE/INSERT INTO "table_name"和MySQL使用CREATE TABLE/INSERT INTO table_name

  • MySQL不在架构定义中使用引号

  • MySQL在INSERT INTO子句中使用单引号作为字符串

  • SQLlite和MySQL有不同的方法来转义INSERT INTO子句中的字符串

  • SQLlite使用't''f'用于布尔值,MySQL使用10(当你有一个字符串时,一个简单的正则表达式可能会失败:'我做,你不在你的内部INSERT INTO

  • SQLLite使用AUTOINCREMENT,MySQL使用AUTO_INCREMENT

这是一个非常基本的被破解的perl脚本,它适用于我的数据集,并检查我在网上找到的其他perl脚本的更多这些条件。Nu保证它会为您的数据工作,但可以随时修改并回复此处。

#! /usr/bin/perlwhile ($line = <>){
    if (($line !~  /BEGIN TRANSACTION/) && ($line !~ /COMMIT/) && ($line !~ /sqlite_sequence/) && ($line !~ /CREATE UNIQUE INDEX/)){

        if ($line =~ /CREATE TABLE \"([a-z_]*)\"(.*)/){
            $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_]*)\"(.*)/){
            $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;
    }}


查看完整回答
反对 回复 2019-08-09
  • 3 回答
  • 0 关注
  • 1294 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信