H2数据库数据迁移

记一次H2与MySQL之间的数据迁移

最近在用Golang写爬虫,使用的ORM是Gorm,暂不正式支持嵌入式的H2数据库,所以就用mysql来存爬取到的数据。

由于原先数据是放在H2数据库里的,便产生了在H2Mysql之间迁移数据的需求。

表结构

之前是使用FlywayH2数据库进行的版本管理,所以之间写的Sql保存了下来,H2MysqlSql语法还是比较像的:

H2 创建 user表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
create table USER
(
ID BIGINT auto_increment,
NICKNAME VARCHAR(100) not null,
PASSWORD VARCHAR(100),
EMAIL VARCHAR(200) not null
constraint USER_EMAIL_UINDEX
unique,
AVATARIMAGE VARCHAR(500),
GITHUB_ID VARCHAR(500)
constraint USER_GITHUB_ID_UINDEX
unique,
GMT_CREATE BIGINT not null,
GMT_MODIFIED BIGINT not null,
constraint USER_PK
primary key (ID)
);

comment on table USER is '论坛的用户表';

comment on column USER.GMT_CREATE is '创建时间戳';

comment on column USER.GMT_MODIFIED is '变更时间戳';

create unique index USER_ID_UINDEX
on USER (ID);

Mysql创建user表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
create table user
(
id bigint auto_increment,
nickname varchar(100) not null,
password varchar(100),
email varchar(200) not null,
avatarimage varchar(500),
github_id varchar(500),
gmt_create bigint not null comment '创建时间戳',
gmt_modified bigint not null comment '变更时间戳',
constraint user_pk
primary key (id)
) comment '论坛的用户表';

create unique index user_id_uindex
on user (id);

create unique index user_email_uindex
on user (email);

create unique index user_github_id_uindex
on user (github_id);

H2增加一个字段

1
2
alter table user
add description varchar(20);

mysql增加一个字段

1
2
alter table USER
add description varchar(20);

H2删除字段

1
alter table COMMENT drop column CITED_COMMENT_CONTENT;

mysql删除字段

1
alter table COMMENT drop column CITED_COMMENT_CONTENT;

H2修改字段

1
2
3
4
alter table COMMENT alter column CITED_COMMENT_CONTENT VARCHAR(512);
alter table SECTION alter column INVITATION_STAR_NUM rename to "Section_TOTAL_CANDY";

comment on column SECTION."Section_TOTAL_CANDY" is '版块总糖数';

mysql修改字段

1
2
alter table comment modify cited_comment_content varchar(512);
alter table section change invitation_star_num section_total_candy bigint default 0 comment '版块总糖数';

IDEA可以使用ctrl+shift+u把字母批量的改为大写或小写。

这样修改sql的目的是想让mysql接续H2的版本控制,大数据量的数据应使用其他方式。

数据

表结构迁移完成后,数据的迁移就变得很简单。以前在OracleMysql的数据迁移中,我使用的是Navicat,现在发现IDEA自带的数据库管理工具也挺好用的,IDEA的数据跨库迁移:

找到对应表,确认即可,注意错误信息。