如何在项目中使用人大金仓替换mysql

文章目录

  • 数据库连接配置调整
    • 驱动和连接字符串修改:
    • 用户名和密码:
  • SQL 语法兼容性检查
    • 数据类型差异处理:
    • 函数差异:
    • SQL语句
    • 客户端 SQL 交互工具
  • 数据迁移
    • 数据库、用户移植
    • 数据迁移工具使用:
    • 迁移过程中的问题及解决方案
  • 迁移后项目功能状态
  • KingBase的后续使用参考资料

数据库连接配置调整

驱动和连接字符串修改:

  1. 在项目的配置文件(如 Spring Boot 项目中的application.properties或application.yml)中,将 MySQL 的驱动类名和连接字符串替换为人大金仓数据库对应的内容。
  2. 对于 MySQL,连接字符串通常是jdbc:mysql://localhost:3306/your_database_name,驱动类名是com.mysql.cj.jdbc.Driver。而人大金仓数据库的连接字符串一般是jdbc:kingbase8://localhost:54321/your_database_name?currentSchema=mycnblog,驱动类名是com.kingbase8.Driver
  3. 例如,在application.properties文件中修改如下:
    原 MySQL 配置:
 spring.datasource.driver - class - name=com.mysql.cj.jdbc.Driver
 spring.datasource.url=jdbc:mysql://localhost:3306/your_database_name
  1. 修改为人大金仓数据库配置:
 spring.datasource.driver - class - name=com.kingbase8.Driver
 spring.datasource.url=jdbc:kingbase8://localhost:54321/your_database_name

用户名和密码:

同时,确保数据库用户名和密码正确配置。如果在 MySQL 和人大金仓数据库中的用户名和密码不同,需要在配置文件中更新为人大金仓数据库的登录凭证。

SQL 语法兼容性检查

数据类型差异处理:

KingbaseES 对 MySQL的基本数据类型如数值类型(整型、浮点型、定点数类型)、文本字符串类型(CHAR、VARCHAR、TINYTEXT、MEDIUMTEXT、LONGTEXT)、位类型、日期时间类型(YEAR、TIME、DATE、DATETIME、TIMESTAMP)、枚举类型ENUM、集合类型SET、二进制类型(BINARY、VARBINARY、BLOB)、空间类型(GEOMETRY、POINT、LINESTRING、POLYGON)、JSON类型(JSON对象、JSON数组)可以原生支持,或者通过转换进行支持

具体兼容与转换点击这里查看

函数差异:

  • 兼容MySQL常用的日期时间函数

  • 兼容数值函数,如:ABS、ACOS、CEIL、CEILING等

  • 兼容BIT_LENGTH、CHAR_LENGTH、CONCAT、FIND_IN_SET、OCTET_LENGTH等字符函数

  • 兼容AVG、BIT_AND、BIT_OR、GROUP_CONCAT、STDDEV_POP等聚集函数

  • 兼容CUME_DIST、DENSE_RANK、FIRST_VALUE、LAST_VALUE等窗口函数

  • 兼容JSON函数

  • 兼容和base64的转换函数:to_base64、from_base64等

具体函数差异点击这里查看

SQL语句

在 KingbasES 中,对大多数常用的 MySQL特有 SQL 语句均提供了原生支持。这项措施使得 MySQL 应用程序在 KingbaseES 系统中通常只需很少的代码变动就可正常运行。

  • 以下列出不兼容的sql
sqlMySQLKingBase描述
位操作符: #不支持支持#是位异或操作符。它用于对两个二进制数的每一位进行异或运算。
RLIKE支持不支持用于正则表达式匹配
全局临时表不支持支持全局临时表是一种特殊的临时表。临时表主要用于存储临时数据,这些数据在特定的会话或者事务处理结束后通常会自动删除。而全局临时表与普通临时表的区别在于,它可以在多个会话之间共享数据,并且在所有引用它的会话都结束后,全局临时表中的数据才会被清除。
序列不支持支持序列是一种数据库对象,用于生成唯一的、按照一定规则递增递减的数值序列。通常用于为主键或其他需要唯一标识的列提供自动增长的数值。例如,在一个包含用户信息的表中,用户 ID 列需要一个唯一的、递增的数值作为标识,就可以使用序列来为每次插入新用户记录时生成新的用户 ID。
不支持支持在数据库领域,“包” 是一种将相关的数据库对象(如存储过程、函数、变量、游标等)组合在一起的机制。它提供了一种组织封装数据库逻辑的方式,类似于面向对象编程中的类,使得数据库开发更加模块化、易于管理和维护。传统的 MySQL 没有像一些高级数据库(如 Oracle、Kingbase)那样提供包的概念。这意味着在 MySQL 中,没有直接的语法来创建一个包含多个相关数据库对象的包结构。MySQL 通过其他方式来实现类似的功能整合。例如,通过合理的数据库架构设计命名规范,将相关的存储过程和函数放在同一个数据库中,并通过良好的注释和文档来表明它们之间的关联。但这种方式没有像包那样提供严格的封装和访问控制机制。
LOGFILE GROUP支持不支持1. MySQL 中的情况: 在 MySQL 中,支持日志文件组(LOGFILE GROUP)。在 MySQL 的某些存储引擎(如 InnoDB)中,日志文件组用于存储事务日志,这些日志可以帮助数据库在系统故障、意外关闭等情况下恢复数据。例如,InnoDB 存储引擎使用日志文件组来实现预写式日志(Write - Ahead Logging,WAL)机制。通过将事务的修改操作先记录到日志文件组中的日志文件中,然后再将修改应用到实际的数据文件,这样在数据库出现故障时,可以根据日志文件中的记录来恢复未完成的事务,从而保证数据的完整性。2. 在 Kingbase 中,虽然没有 LOGFILE GROUP,但有类似的日志机制,如重做日志(Redo Log)等。这些日志系统在后台默默地工作,记录数据库的更改操作,并且在数据库启动、恢复等过程中发挥关键作用。开发人员和管理员通常不需要像在 MySQL 中管理日志文件组那样直接操作这些日志组件,而是通过 Kingbase 提供的备份、恢复工具和一些系统参数来间接管理数据库的恢复性能和数据完整性。例如,通过配置备份策略、检查点(Checkpoint)频率等参数来确保数据库在出现故障时能够快速、准确地恢复。
外部表不支持支持外部表是一种特殊的数据库表,它的数据存储在数据库外部的文件(如文本文件、CSV 文件、XML 文件等)中。通过定义外部表,数据库可以像访问内部普通表一样访问外部文件中的数据,提供了一种将外部数据集成到数据库环境中的方式。
DBLINK不支持支持DBLINK 是一种数据库对象,用于在一个数据库实例与另一个数据库实例之间建立连接通道。通过这个连接,可以在本地数据库中访问远程数据库中的对象(如表、视图、存储过程等),就好像这些远程对象是本地数据库的一部分一样。这为分布式数据库应用场景提供了强大的支持,使得不同数据库之间的数据共享和交互变得更加便捷。
DO支持支持(有差异)在 MySQL 中,DO是一个执行表达式但不返回结果集的语句。它主要用于执行存储过程或者函数调用,并且丢弃返回值(如果有的话)。例如,当调用一个存储过程只是为了执行其中的操作逻辑(如插入、更新、删除数据等操作),而不需要返回结果时,可以使用DO语句。 Kingbase(人大金仓数据库)没有与 MySQL 中DO语句完全相同的语法和功能。在 Kingbase 中,调用存储过程通常会返回结果集(如果存储过程有返回值的话),并且使用的语法与 MySQL 有所不同。
insert delayed支持不支持在 MySQL 中,INSERT DELAYED是一种特殊的插入语句。当使用INSERT DELAYED时,MySQL 会将插入操作放入一个内部队列,然后立即返回给客户端,而不是等待插入操作实际完成。这样客户端就可以继续执行其他操作,而插入操作会在后台由 MySQL 服务器在适当的时候处理。这种方式主要用于在高并发写入场景下,提高客户端的响应速度。
set password for支持不支持在 MySQL 中,SET PASSWORD FOR语句用于设置用户的密码。它提供了一种灵活的方式来管理用户账户的安全性。可以通过这个语句为特定用户设置新密码,包括为本地用户、远程用户或者通过特定主机连接的用户设置密码。在 Kingbase 中,通常使用ALTER USER语句来修改用户密码。
check/checksum table支持不支持CHECK(表检查) 在 MySQL 中,CHECK语句主要用于检查表的完整性。对于某些存储引擎(如 MyISAM),它可以检查表是否存在错误,比如索引是否损坏、数据行是否有问题等。不过,不同存储引擎对CHECK命令的支持程度有所不同。例如,InnoDB 存储引擎会自动处理很多数据完整性的问题,CHECK操作对它的作用相对有限。CHECKSUM TABLE(计算表的校验和)CHECKSUM TABLE用于计算并返回一个或多个表的校验和。校验和是根据表中的数据内容计算出来的一个数值,它可以用于快速比较表在不同时间点的数据完整性。如果表的数据发生了变化,校验和通常也会改变。
show语句支持支持(有差异)
foreach语句不支持支持FOREACH是一种循环控制结构,用于遍历数组、集合或其他可迭代的数据结构中的元素。在数据库环境中,当涉及到处理批量数据,如对表中的多行数据进行相同的操作,或者对一个数组类型的变量中的多个元素进行处理时,FOREACH循环可以提供高效且简洁的方式来完成任务。
continue语句不支持支持在程序设计中,CONTINUE语句是一种控制流语句。通常用于循环结构(如FOR循环、WHILE循环等)中,当执行到CONTINUE语句时,它会跳过当前循环体中剩余的语句,直接进入下一次循环迭代。这样可以根据特定的条件跳过某些不必要的操作,提高程序的执行效率和灵活性。
exit语句不支持支持在一个存储过程中,如果满足某个条件,可以使用EXIT语句来立即终止存储过程的执行。
execute immediate语句不支持支持支持的含义:在 Kingbase(人大金仓数据库)中,EXECUTE IMMEDIATE语句提供了一种直接执行动态 SQL 的方式。它允许将一个包含 SQL 语句的字符串变量直接作为参数传递给这个语句,数据库引擎会立即执行这个动态构建的 SQL 语句。
异常处理exception语句不支持支持在数据库编程中,异常处理是一种机制,用于捕获和处理在程序执行过程中出现的错误或异常情况。这些异常可能包括数据库操作错误(如插入违反约束的数据、查询不存在的表等)、运行时错误(如变量未初始化、除数为零等)或者外部资源访问错误(如网络故障导致的数据库连接中断)等。通过使用异常处理语句,可以使程序更加健壮,避免因为异常导致程序崩溃,并且能够在出现异常时执行一些特定的恢复或报告操作。
  • SAVEPOINT、ROLLBACK TO SAVEPOINT、RELEASE SAVEPOINT等
    点击查看详细的sql差异详情1
    点击查看详细的sql差异详情2

客户端 SQL 交互工具

在实际应用中,通常客户 DDL 脚本和报表是通过 SQL 交互工具移植的。针对这种情况,KingbaseES 提供了如下 SQL 交互工具:

ksql:命令行的 SQL 交互工具,类似 MySQL 的 命令行。

Kstudio:图形化的 SQL 交互工具,类似 MySQL的图形化工具。

通过上述工具,用户可连接数据库服务器,运行数据库实用程序,发送 SQL 语句,运行 SQL 脚本,或运行KingbaseES 数据库管理命令实施数据库管理等。

数据迁移

数据库、用户移植

数据库是各种 SQL 和 PL/SQL 数据库对象的存放容器,而用户是这些对象的管理者和使用者。因此,在迁移数据库对象之前,一般应先迁移数据库、用户。

那么,如何移植这些内容呢?应在目的数据库 KingbaseES 上创建与源数据库 MySQL同名的数据库、用户。

另外,所创建数据库的字符集应与 MySQL数据库字符集一致.

数据迁移工具使用:

使用KingBase自带的迁移工具(KDTS进行数据迁移).
数据库迁移工具在完全安装时已经安装好了, 点击开始, 找到数据库迁移工具, 双击打开.
在这里插入图片描述

  1. 然后在浏览器中输入url: http://127.0.0.1:54523, 使用在金仓官网注册的账号进行登录.

  2. 登录成功后在数据源管理中添加源库和目标库连接. 在添加时需要输入必要的连接信息.
    在这里插入图片描述

  3. 之后在迁移任务管理中新建迁移任务, 按照指引填写必要的对比信息.
    在这里插入图片描述

迁移过程中的问题及解决方案

  1. 数据类型转换的问题:
    在新建迁移任务时, 最后一步是配置数据类型的参数, 这里有一些参数根据自己的需要进行更改, 否则可能会造成数据缺失等的问题. 如图
    在这里插入图片描述
    针对源数据类型是varchar时, 在源库中制定了长度的, 目标库中也会指定长度. 在源库中没有指定长度时, KingBase会默认长度为1, 这样在迁移过程中会对数据进行截取. 造成数据缺失的情况. 可以在配置中进行更改从而防止此问题.
    以上例为参考, 对其他类型的数据也需要进行必要配置. 以保证数据完整性和可用性.
  2. 持续更新中…

迁移后项目功能状态

目前正常.

KingBase的后续使用参考资料

  • 数据库管理员指南
  • 数据库开发指南
  • KingbaseES_SQL语言参考手册

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/935666.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker 安装 sentinel

Docker 安装系列 1、拉取 [rootTseng ~]# docker pull bladex/sentinel-dashboard Using default tag: latest latest: Pulling from bladex/sentinel-dashboard 4abcf2066143: Pull complete 1ec1e81da383: Pull complete 56bccb36a894: Pull complete 7cc80011dc6f: Pull…

十一、容器化 vs 虚拟化-Docker 使用

文章目录 前言一、Docker Hello World二、Docker 容器使用三、Docker 镜像使用四、Docker 容器连接五、Docker 仓库管理六、Docker Dockerfile七、Docker Compose八、Docker Machine九、Swarm 集群管理 前言 Docker 使用‌ Docker 容器使用、镜像使用、容器连接、仓库管理、Do…

【报错】新建springboot项目时缺少resource

1.问题描述 在新建springboot项目时缺少resources,刚刚新建时的目录刚好就是去掉涂鸦的resources后的目录 2.解决方法 步骤如下:【文件】--【项目结构】--【模块】--【源】--在main文件夹右击选择新建文件夹并命名为resources--在test文件夹右击选择新建文件夹并命名…

Java面试之Happens-Before原则

此篇接上一篇的Java面试之volatile关键字。 首先,这是Java语言中的一个“先行发生”(Happens-Before)的原则。是判断数据是否存在竞争,线程是否安全的非常有用的手段,也是Java内存模型中定义的两项操作之间的偏序关系。 其次,Happ…

AB plc设备数据 转 opc ua项目案例

目录 1 案例说明 2 VFBOX网关工作原理 3 准备工作 4 网关采集AB PLC数据 5 启动OPC UA协议转发采集的数据 6 案例总结 1 案例说明 设置网关采集AB PLC数据把采集的数据转成opc ua协议转发给其他系统。 2 VFBOX网关工作原理 VFBOX网关是协议转换网关,是把一种…

ASP.NET|日常开发中连接Sqlite数据库详解

ASP.NET|日常开发中连接Sqlite数据库详解 前言一、安装和引用相关库1.1 安装 SQLite 驱动1.2 引用命名空间 二、配置连接字符串2.1 连接字符串的基本格式 三、建立数据库连接3.1 创建连接对象并打开连接 四、执行数据库操作4.1 创建表(以简单的用户表为例…

Redis篇-6--原理篇5--单线程模型

1、概述 Redis 采用单线程模型来处理客户端请求,这意味着在任意时刻只有一个命令被执行。这种设计简化了 Redis 的实现,并确保了高并发环境下的数据一致性。尽管 Redis 是单线程的,但它通过高效的内存管理和网络 I/O 操作,仍然能…

Spring Boot + Spring AI快速体验

Spring AI快速体验 1 什么是Spring AI主要功能 2 快速开始2.1 版本说明2.2 配置文件2.3 pom依赖2.3.1 spring maven仓库2.3.2 核心依赖 2.4 定义ChatClient2.5 启动类2.6 测试 3 参考链接 1 什么是Spring AI Spring AI是Spring的一个子项目,是Spring专门面向于AI的…

【Unity】【VR开发】摩托车游戏开发笔记1-摩托车手把旋转时轴位移问题

【背景】 做VR摩托车游戏时,需要给摩托车加仿真控制,其中就有抓握龙头旋转时转弯的实现。 实现分两部分,一个是视觉上的动画实现,一个是摩托车实际的位移控制实现。先实现动画效果,也就是抓握把手能够让车头左右旋转。这里先简单一点,实现左手单手让车头旋转。 【设计】…

uniapp -- 实现页面滚动触底加载数据

效果 首选,是在pages.json配置开启下拉刷新 {"path": "pages/my/document/officialDocument","style": {"navigationStyle":</

丹摩|丹摩助力selenium实现大麦网抢票

丹摩&#xff5c;丹摩助力selenium实现大麦网抢票 声明&#xff1a;非广告&#xff0c;为用户体验 1.引言 在人工智能飞速发展的今天&#xff0c;丹摩智算平台&#xff08;DAMODEL&#xff09;以其卓越的AI算力服务脱颖而出&#xff0c;为开发者提供了一个简化AI开发流程的强…

Android系统(android app和系统架构)

文章目录 AndroidAndroid Apps四大组件 Android系统Platform API之下&#xff1a;一个微笑内核adb(Android Debug Bridge) Android包管理机制Android的Intent机制参考 Android LinuxFrameworkJVM 在Linux/Java上做了个二次开发&#xff1f;并不完全是&#xff1a;Android定义…

小程序开发中的插件生态与应用-上

更多精彩内容都在公zhong号&#xff1a;小白的大数据之旅 在小程序的开发过程中&#xff0c;插件作为扩展功能、提升效率的重要工具&#xff0c;扮演着不可或缺的角色。它们不仅能够帮助开发者快速集成复杂的功能模块&#xff0c;还能优化开发流程&#xff0c;缩短项目周期。 …

An error happened while trying to locate the file on the Hub and we cannot f

An error happened while trying to locate the file on the Hub and we cannot find the requested files in the local cache. Please check your connection and try again or make sure your Internet connection is on. 关于上述comfy ui使用control net预处理器的报错问…

Java 实现给pdf文件指定位置盖章功能

Java 实现给pdf文件指定位置盖章功能 开发中遇到一个需求, 需要给用户上传的的pdf文件, 指定位置上盖公章的功能, 经过调研和对比, 最终确定实现思路. 这里是使用pdf文件中的关键字进行章子的定位, 之所以这样考虑是因为如果直接写死坐标的话, 可能会出现因pdf大小, 缩放, 盖章…

Vmware的网络适配器的NAT模式和桥接模式有何区别?如何给Uubunt系统添加桥接网卡?

Vmware的网络适配器的NAT模式和桥接模式有何区别&#xff1f; 如何给Uubunt系统添加桥接网卡? 步骤如下&#xff1a;

主机连不上CentOS7虚拟机Redis

CentOS7中的Redis连不上主机 是否ping通 先尝试主机是否能Ping通虚拟机 虚拟机中查看ens33对应的地址&#xff0c;使用ifconfig 再在主机上尝试Ping&#xff0c;如果无法Ping通&#xff0c;先排除是否是虚拟机NAT或者桥接模式配置的问题 redis.conf配置 我是按照黑马的教…

vue element 切换 select 下拉框的 单选多选报错

今天根据项目需求&#xff0c;需要对下拉框进行&#xff0c;单双选判断&#xff0c;当多选切换成多选&#xff0c;没有问题但是单选切换成多选报错如下 页面是要求 选择in或者notin时候 多选 经过好长时间摸索&#xff0c;解决了&#xff0c;最后使用select的失去焦点事件解决的…

VBA高级应用30例应用在Excel中的ListObject对象:向表中添加注释

《VBA高级应用30例》&#xff08;版权10178985&#xff09;&#xff0c;是我推出的第十套教程&#xff0c;教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开&#xff0c;这套教程案例与理论结合&#xff0c;紧贴“实战”&#xff0c;并做“战术总结”&#xff0c;以…

BA和CS算法中的Levy飞行策略

Levy飞行策略通过模拟自然界中动物的长距离迁徙行为&#xff0c;指导粒子进行更大范围的搜索&#xff0c;有助于算法快速找到全局最优解。它是一种具有独特优势的随机行为策略&#xff0c;模拟随机游走或搜索过程中的步长和方向&#xff0c;其步长的概率分布为重尾分布&#xf…