未加星标

sqlite迁移到mysql脚本的方法

字体大小 | |
[数据库(mysql) 所属分类 数据库(mysql) | 发布者 店小二04 | 时间 | 作者 红领巾 ] 0人收藏点击收藏

废话不多说了,直接给大家贴代码了,具体代码如下所示:

#! /usr/bin/perl
#
# based on https://stackoverflow.com/a/87531/5742651
# usage: sqlite3 .dump database_name.sqlite3 | perl sqlite2mysql.pl | mysql -u root -p $import_database_name
#
# ignore follow lines:
# BEGIN TRANSACTION
# COMMIT
# sqlite_sequence
# CREATE UNIQUE INDEX
# PRAGMA foreign_keys=OFF
# "tablename/field" => `tablename/field`
# booleans 't' and 'f' => 1 and 0
# AUTOINCREMENT => AUTO_INCREMENT
# varchar => varchar(255)
# CREATE TABLE table... => DROP TABLE table; CREATE TABLE table...
# Merge insert sqls into multiple insert to speed up
# INSERT INTO table VALUES('val1');
# INSERT INTO table VALUES('val2'); => INSERT INTO table VALUES('val1'), ('val2'), ('val3');
# INSERT INTO table VALUES('val3');
my $open=0;
my $line_cache = '';
# For speed up
print "SET GLOBAL max_allowed_packet=209715200;\n";
#print "SET AUTOCOMMIT=0;\n";
while ($line = <>){
if (($line !~ /PRAGMA foreign_keys=OFF/) && ($line !~ /BEGIN TRANSACTION/) && ($line !~ /COMMIT/) && ($line !~ /sqlite_sequence/) && ($line !~ /CREATE UNIQUE INDEX/)){
if ($line =~ /CREATE TABLE \"([a-z_0-9]*)\"(.*)/){
$name = "\`$1\`";
$sub = $2;
$sub =~ s/varchar([^(])/varchar(255)$1/g;
$line = "DROP TABLE IF EXISTS $name;\nCREATE TABLE $name$sub\n";
}
elsif ($line =~ /CREATE VIEW ([a-z_0-9]*)(.*)/){
$name = "\`$1\`";
$sub = $2;
$line = "DROP VIEW IF EXISTS $name;\nCREATE VIEW $name$sub\n";
}
elsif ($line =~ /INSERT INTO \"([a-z_]*)\" VALUES(.*);/){
if ($open == 0) {
$open = 1;
$line_cache .= "INSERT INTO \`$1\` VALUES $2";
} else {
$line_cache .= ", $2";
}
next;
}else{
$line =~ s/\'\'/\\\'/g;
}
if ($open == 1) {
$open = 0;
$line = $line_cache.";\n".$line;
$line_cache = '';
}
$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;
}
}
#print "SET AUTOCOMMIT=1;\n";

总结

以上所述是小编给大家介绍的sqlite迁移到mysql脚本的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

本文数据库(mysql)相关术语:navicat for mysql mysql workbench mysql数据库 mysql 存储过程 mysql安装图解 mysql教程 mysql 管理工具

主题: UTAUTAUTIGMCTI谢大
tags: line,gt,table,name,VALUES,INTO,open,cache,sqlite,varchar
分页:12
转载请注明
本文标题:sqlite迁移到mysql脚本的方法
本站链接:https://www.codesec.net/view/561209.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 数据库(mysql) | 评论(0) | 阅读(146)