如何将MySQL中指定的表结构同步到人大金仓数据库

news/2025/2/22 19:47:52/

场景        

刚开始做数据库适配的时候,这是一个棘手的问题,因为MySQL的库里,表结构,字段都是最新的,但是金仓的库,全是旧版本的表结构。需要把我们模块的表结构,同步到金仓中。

        虽然金仓有数据库同步工具,但是直接把所有表都给同步过来,难免会影响到其他模块。

        然后就写了一个工具类来进行这一操作。

        原理:获取MySQL中,指定的某几张表,通过程序,获取表的字段,字段类型,长度,注释,主键,索引,标注释等等,然后生成金仓中的可执行SQL,自动执行。

(ps由于,工具类纯自己手写,因此设置了vip文章,非vip成员要获取联系作者)

首先先看一下金仓的创建表语法和删除表语法:

这俩个语法和MySQL不同,包括创建表时,给字段加注释,给表加注释的方式都不同!

创建表:

给字段加注释,直接在字段后面用 comment 'xxxxx'会报错,同样给表加注释直接在表的后面指定comment也会报错,必须要在语句的最后统一指定,试了好多次错才找到解决方法。

举个例子:

CREATE TABLE "PUBLIC"."rec_a01_his" ("A00" VARCHAR(36 char) NOT NULL  PRIMARY KEY,"R0101" VARCHAR(60 char) NULL ,"R0102" VARCHAR(10 char) NULL ,"R0103" VARCHAR(10 char) NULL ,"R0104" DATE NULL ,"RECTYPEID" VARCHAR(100 char) NULL ,"DELETEFLAG" VARCHAR(2 char) NULL  DEFAULT 0,"CREATETIME" TIMESTAMP NULL ,"CREATEUSER" VARCHAR(36 char) NULL ,"UPDATETIME" TIMESTAMP NULL ,"UPDATEUSER" VARCHAR(36 char) NULL
)
WITH (OIDS=FALSE
);
COMMENT ON TABLE "PUBLIC"."rec_a01_his" IS '基本情况';
COMMENT ON COLUMN "PUBLIC"."rec_a01_his"."R0101" IS '姓名';
COMMENT ON COLUMN "PUBLIC"."rec_a01_his"."R0102" IS '性别';
COMMENT ON COLUMN "PUBLIC"."rec_a01_his"."DELETETIME" IS '删除时间';
COMMENT ON COLUMN "PUBLIC"."rec_a01_his"."DELETEUSER" IS '删除人';
CREATE INDEX "rec_a01_his_rectypeid" ON "PUBLIC"."rec_a01_his" (RECTYPEID);

删除表:如果存在就删除,不存在执行也不报错

DROP TABLE IF EXISTS  "rec_a01_his" CASCADE;

案例

 下面提供的工具接口中       一共有三个接口:(支持一次输入多张表,多个表名之间用英文逗号分隔)

第一个:根据输入的表名,输出/控制台打印出可执行的新建表SQL。

第二个:根据输入的表名,输出/控制台打印出可执行的删除表SQL。

第三个:根据输入的表名,先删除这张表,再重新从MySQL中获取结构,然后再通过建表SQL进行新建。        

No1: 

发请求:rec_test为测试表

控制台输出:

可以直接复制到金仓去执行。

No2: 

 rec_test为测试表,生成它的删除语句,这个比较简单


http://www.ppmy.cn/news/1090447.html

相关文章

scala基础

scala 基础 1. scala简介 scala是运行在 JVM 上的多范式编程语言,同时支持面向对象和面向函数编程早期scala刚出现的时候,并没有怎么引起重视,随着Spark和Kafka这样基于scala的大数据框架的兴起,scala逐步进入大数据开发者的眼帘…

JAVA 函数式接口与lambda

1.函数式定义 什么是函数式接口呢?听起来很绕,我们可以这样理解: 可以接收lambda函数的接口,就可以叫做函数式接口。 注意一个函数式接口里,只允许定义一个抽象方法。 在java里可以用FunctionalInterface注解来标注…

一:高通量虚拟筛选技术与中药/天然产物挖掘药效分子专题

一:高通量虚拟筛选技术与中药/天然产物挖掘药效分子专题 第一天上午 1.筛选策略基本原理及流程 1.运用全新筛选策略快速发现新药先导化合物 1.1全新筛选策略的基本原理 1.1.1基于药效团模型的虚拟筛选方法 1.1.2基于分子对接的虚拟筛选方法 1.1.3全新先导化合物的筛…

《人生苦短——我学Python》条件判断->双向选择(if--else)

今天我们来学习双向选择判断。顾名思义,双向就是两种选择选其一,即if----else。如果If的条件不成立,则执行else下的语句,否则执行if下面的语句。显然,它们是互斥的!下面就让我们来详细看看吧! 文…

【构造】CF Edu 12 D

Problem - D - Codeforces 题意: 思路: 这种题一定要从小数据入手,不然很有可能走歪思路 先考虑n 1的情况,直接输出即可 然后是n 2的情况,如果相加是质数,就输出2个,否则就输出一个 然后…

Flutter实现CombineExecutor进行多个异步分组监听,监听第一个异步执行的开始和最后一个异步执行结束时机。

1.场景 我们在调用接口时,很多时候会同时调用多个接口,接口都是异步执行,我们很难知道调用的多个接口哪个会最后执行完成,我们有时候需要对最后一个接口执行完成的时机监听,所以基于该需求,设计了CombineE…

ubuntu 22.04 深度学习环境配置

第一步 安装驱动 网址:https://www.nvidia.com/download/index.aspx 根据硬件选择,我这里是 ubuntu 服务器,显卡是v100 sudo su root chmod ax NVIDIA //按 TAB 即可 加运行权限 # 禁用原显卡驱动 vim /etc/modprobe.d/blacklist.conf # 在最后一行…

排列组合问题小总结

排列组合问题抽象化:将M个果子分为N垛 分情况讨论: 类型一:N个相同的果子M个相同的垛(不允许存在空垛) 例题:(洛谷P1025)将整数 n 分成 k 份,且每份不能为空,任意两个方案不相同(不…