注册
MySQL的 REPLACE INTO 自动转换适配
技术分享/ 文章详情 /

MySQL的 REPLACE INTO 自动转换适配

灿烂的江河 2022/09/02 1722 13 0

不知道大家迁移时 REPLACE INTO 怎么适配的。
我的场景是这样的,之前有一套MySQL的安装脚本,包括了安装MySQL,然后创建账号,然后shell脚本执行sql脚本初始化业务数据库和填充默认的业务数据,在迁移过程中遇到了一个问题就是 REPLACE INTO 语句非常非常的多,上千条,当时手动改了几个 MERGE INTO 发现能执行,但是不知要改的到什么时候,要改很久,然后就写了个程序自动适配,从文件里读取一份MySQL的脚本,然后输出适配达梦的 MERGE INTO。

比如

REPLACE INTO "sys_api"("apiId","apiName","apiCode","url", "method","modelId","type","sort","status", "remark","createTime","createUser", "updateTime","updateUser","isDelete") VALUES ('test','菜单列表','test','test','GET', 'test','4',null, '1',null,'20190716171438','','20190716191605','','0');

微信截图_20220902172559.png
然后输出一个完整的 符合语法的 MERGE INTO

MERGE INTO "sys_api" TAB1 USING (SELECT 'test' AS FIE1,'菜单列表','test','test','GET','test','4',null,'1',null,'20190716171438','','20190716191605','','0' FROM DUAL) TAB2 ON (TAB1."apiId" = TAB2.FIE1) WHEN MATCHED THEN UPDATE SET TAB1."apiName" = '菜单列表', TAB1."apiCode" = 'test', TAB1."url" = 'test', TAB1."method" = 'GET', TAB1."modelId" = 'test', TAB1."type" = '4', TAB1."sort" = NULL, TAB1."status" = '1', TAB1."remark" = NULL, TAB1."createTime" = '20190716171438', TAB1."createUser" = '', TAB1."updateTime" = '20190716191605', TAB1."updateUser" = '', TAB1."isDelete" = '0' WHEN NOT MATCHED THEN INSERT ("apiId","apiName","apiCode","url","method","modelId","type","sort","status","remark","createTime","createUser","updateTime","updateUser","isDelete") VALUES ('test', '菜单列表', 'test', 'test', 'GET', 'test', '4', NULL, '1', NULL, '20190716171438', '', '20190716191605', '', '0');

微信截图_20220902172713.png
不知道更好的解决办法了,有的话交流一下。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服