当前位置: 首页 > news >正文

java每日精进 2.13 MySql迁移人大金仓

1.迁移数据库

1. 数据库创建语句

  • MySQL

    CREATE DATABASE dbname;

  • 人大金仓(Kingbase)
    • 在人大金仓中,CREATE DATABASE 的语法通常相同,但可能需要特别注意字符集的指定(如果涉及到多语言支持等),人大金仓默认使用 UTF-8 编码。

    CREATE DATABASE dbname ENCODING='UTF8';

2. 数据类型差异

  • BOOLEAN 类型

    • MySQLBOOLEAN 映射为 TINYINT(1),而 人大金仓 使用 BOOLEAN 类型(与 PostgreSQL 相同)。
    • MySQL

      CREATE TABLE example (flag BOOLEAN);

    • 人大金仓

      CREATE TABLE example (flag BOOLEAN);

  • AUTO_INCREMENTSERIAL

    • MySQL 使用 AUTO_INCREMENT 来定义自增字段,而 人大金仓 使用 SERIAL
    • MySQL

      CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY);

    • 人大金仓

      CREATE TABLE users (id SERIAL PRIMARY KEY);

  • TEXT 类型

    • 在 MySQL 中,TEXT 是可以存储长文本的类型,而 人大金仓(基于 PostgreSQL)也使用 TEXT,但它支持更复杂的文本操作。
    • MySQL

      CREATE TABLE article (content TEXT);

    • 人大金仓

      CREATE TABLE article (content TEXT);

  • ENUM 类型

    • MySQL 支持 ENUM 类型,但人大金仓没有直接支持这个类型。如果需要在人大金仓中使用 ENUM,可以考虑使用 CHECK 约束或者 VARCHAR 类型,并加上合理的值限制。
    • MySQL

      CREATE TABLE example (status ENUM('active', 'inactive'));

    • 人大金仓

      CREATE TABLE example (status VARCHAR(10) CHECK (status IN ('active', 'inactive')));

  • DATETIMETIMESTAMP

    • MySQL 中有 DATETIMETIMESTAMP 类型,而 人大金仓 使用 TIMESTAMP,它的表现可能有所不同。人大金仓会根据 PostgreSQL 的规范处理 TIMESTAMP 类型,可能需要特别关注时区问题。
    • MySQL

      CREATE TABLE events (event_time DATETIME);

    • 人大金仓

      CREATE TABLE events (event_time TIMESTAMP);

3. 表的引擎设置

  • MySQL 使用 ENGINE 来指定表的存储引擎(如 InnoDBMyISAM 等)。
  • 人大金仓(PostgreSQL)不使用 ENGINE 语法,所有表都使用统一的存储引擎,所以需要删除这些与存储引擎相关的配置。
  • MySQL

    CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;

  • 人大金仓

    CREATE TABLE users (id INT SERIAL PRIMARY KEY);

4. 外键约束与索引

  • MySQL 支持外键约束,人大金仓也支持,但语法上可能有些许差异(尤其是在删除/更新外键时的行为可能有所不同)。
  • MySQL

    CREATE TABLE orders ( order_id INT AUTO_INCREMENT PRIMARY KEY, user_id INT, FOREIGN KEY (user_id) REFERENCES users(id) );

  • 人大金仓

    CREATE TABLE orders ( order_id SERIAL PRIMARY KEY, user_id INT, FOREIGN KEY (user_id) REFERENCES users(id) );

5. 字符串处理函数

  • MySQL 中的一些字符串处理函数与 人大金仓 中的函数可能不完全一样。例如:
    • MySQL

      SELECT CONCAT(first_name, ' ', last_name) FROM users;

    • 人大金仓

      SELECT first_name || ' ' || last_name FROM users;

6. 注释和分隔符

  • MySQL 支持 --# 注释样式,但人大金仓使用 --/* */
  • MySQL

    -- This is a comment # Another comment

  • 人大金仓

    -- This is a comment /* Another comment */

7. LIMITFETCH

  • MySQL 使用 LIMIT 来限制查询的行数。
  • 人大金仓(PostgreSQL)也使用 LIMIT,但在某些情况下,特别是涉及 OFFSET 时,可能需要调整语法。
  • MySQL

    SELECT * FROM users LIMIT 10;

  • 人大金仓

    SELECT * FROM users LIMIT 10;

8. 日期与时间函数

  • MySQL 提供许多日期和时间函数,如 NOW(), CURDATE() 等。
  • 人大金仓 也有类似的函数,但它们的名称和语法可能有所不同。例如,CURRENT_TIMESTAMP 是标准的 SQL 函数。
  • MySQL

    SELECT NOW();

  • 人大金仓

    SELECT CURRENT_TIMESTAMP;

9. 触发器和存储过程

  • MySQL 和人大金仓都支持触发器和存储过程,但语法上有所不同。存储过程和函数在 MySQL 中使用 DELIMITER 来指定分隔符,而人大金仓不需要使用 DELIMITER,直接定义即可。
  • MySQL

    DELIMITER $$ CREATE PROCEDURE my_procedure() BEGIN SELECT 'Hello, World'; END$$ DELIMITER ;

  • 人大金仓

    CREATE OR REPLACE PROCEDURE my_procedure() AS BEGIN RAISE NOTICE 'Hello, World'; END;

10. SQL 调试和测试

在迁移过程中,建议使用人大金仓提供的调试工具,逐步测试每个 SQL 语句,检查是否有语法或功能上的问题,特别是与数据类型、函数、触发器等相关的部分。

总结:

要将 MySQL 的 .sql 文件修改成能在人大金仓中运行的文件,主要的调整集中在以下几个方面:

  1. 替换 MySQL 特有的数据类型和关键字(如 AUTO_INCREMENTSERIAL)。
  2. 删除与存储引擎相关的配置(如 ENGINE=InnoDB)。
  3. 替换不兼容的函数(如字符串拼接、日期函数等)。
  4. 根据人大金仓的 SQL 标准调整外键和约束的语法。
  5. 确保注释和分隔符的语法符合人大金仓的规范。

在修改完成后,建议在人大金仓的测试环境中运行 SQL 文件,确保没有语法错误或功能冲突。

举例:
Mysql:

CREATE TABLE `member` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`create_time` datetime DEFAULT NULL,`update_time` datetime DEFAULT NULL,`ip` varchar(255) DEFAULT NULL,`name` varchar(255) DEFAULT NULL,`app_id` varchar(255) DEFAULT NULL,`group_id` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Kingbase:

CREATE TABLE "member" ("id" BIGSERIAL NOT NULL,  -- 使用 BIGSERIAL 替代 AUTO_INCREMENT"create_time" TIMESTAMP DEFAULT NULL,-- 使用 TIMESTAMP 替代 datetime"update_time" TIMESTAMP DEFAULT NULL,"ip" VARCHAR(255) DEFAULT NULL,"name" VARCHAR(255) DEFAULT NULL,"app_id" VARCHAR(255) DEFAULT NULL,"group_id" VARCHAR(255) DEFAULT NULL,PRIMARY KEY ("id")
);

2.配置数据

人大金仓使用sql编辑器执行和导入脚本;


3.配置文件修改

原来的application.yml如下:

spring:jpa:database: mysqlshow-sql: truehibernate:ddl-auto: updatenaming:physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategydatabase-platform: org.hibernate.dialect.MySQL5InnoDBDialect  #不加这句则默认为myisam引擎profiles:active: ${ENV:local}
logging:file: ./logback.log
server:port: 8888

修改后如下:

spring:jpa:show-sql: truehibernate:ddl-auto: updatenaming:physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategydatabase-platform: org.hibernate.dialect.MySQL5InnoDBDialect  # 使用人大金仓兼容的Mysql的方言profiles:active: ${ENV:local}  # 默认激活 local 配置文件
logging:file: ./logback.log
server:port: 8888

application-local.yml

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/blockchain_manager?autoReconnect=true&useUnicode=true&useSSL=falseusername: rootpassword: 123456

修改后:

spring:datasource:url: jdbc:kingbase8://localhost:54321/database8  # 人大金仓数据库的连接 URLusername: ****  # 人大金仓数据库的用户名password: ****  # 人大金仓数据库的密码driver-class-name: com.kingbase8.Driver  # 人大金仓数据库的驱动类

application-prod.yml:

spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://${MYSQL_URL}/blockchain_manager?autoReconnect=true&useUnicode=trueusername: mdpassword: ${MYSQL_PASS}
server:port: 8080

修改后:

spring:datasource:url: jdbc:kingbase8://${KINGBASE_URL}:54321/blockchain_manager  # 人大金仓数据库的连接 URLusername: SYSTEM  # 人大金仓数据库的用户名password: ${KINGBASE_PASS}  # 人大金仓数据库的密码driver-class-name: com.kingbase8.Driver  # 人大金仓数据库的驱动类
server:port: 8080

application-prod.yml 中的KINGBASE_URL以及KINGBASE_PASS在生产环境中设置环境变量即可;

可以通过终端设置环境变量。比如,如果你使用的是 bashzsh,可以在终端中使用以下命令设置环境变量:

export KINGBASE_URL=your_kingbase_url
export KINGBASE_PASS=your_kingbase_password

如果你希望在每次启动终端时都能自动设置这些环境变量,可以将这些命令添加到 ~/.bashrc(或者 ~/.zshrc)文件中:

echo "export KINGBASE_URL=your_kingbase_url" >> ~/.bashrc
echo "export KINGBASE_PASS=your_kingbase_password" >> ~/.bashrc

注:如何在 Spring Boot 中引用环境变量

application-prod.yml 文件中引用环境变量时,Spring Boot 会自动解析环境变量并将其替换。例如:

spring:datasource:url: jdbc:kingbase8://${KINGBASE_URL}:54321/blockchain_managerusername: SYSTEMpassword: ${KINGBASE_PASS}driver-class-name: com.kingbase8.Driver

相关文章:

java每日精进 2.13 MySql迁移人大金仓

1.迁移数据库 1. 数据库创建语句 MySQL: CREATE DATABASE dbname; 人大金仓(Kingbase): 在人大金仓中,CREATE DATABASE 的语法通常相同,但可能需要特别注意字符集的指定(如果涉及到多语言支持…...

【R语言】回归分析与判别分析

一、线性回归分析 1、lm()函数 lm()函数是用于拟合线性模型(Linear Models)的主要函数。线性模型是一种统计方法,用于描述一个或多个自变量(预测变量、解释变量)与因变量(响应变量)之间的关系…...

ES6中Object.defineProperty 的详细用法和使用场景以及例子

ES6 Object.defineProperty() 用法总结 Object.defineProperty() 是 ES5 引入的一个方法,ES6 继续强化了该方法的使用,它允许我们为对象的属性定义或修改 属性描述符。它能够控制对象属性的行为,如读写权限、可枚举性和可配置性。 1. Objec…...

揭秘云计算 | 5、关于云计算效率的讨论

一、 公有云效率更高? 解:公有云具有更高的效率。首先我们需要知道效率到底指的是什么。这是个亟须澄清的概念。在这里效率是指云数据中心(我们将在后文中介绍其定义)中的IT设备资源利用率,其中最具有代表性的指标就是…...

【Linux探索学习】第二十七弹——信号(上):Linux 信号基础详解

Linux学习笔记: https://blog.csdn.net/2301_80220607/category_12805278.html?spm1001.2014.3001.5482 前言: 前面我们已经将进程通信部分讲完了,现在我们来讲一个进程部分也非常重要的知识点——信号,信号也是进程间通信的一…...

如何查询网站是否被百度蜘蛛收录?

一、使用site命令查询 这是最直接的方法。在百度搜索框中输入“site:你的网站域名”,例如“site:example.com”(请将“example.com”替换为你实际的网站域名)。如果搜索结果显示了你的网站页面,并且显示了收录的页面数量&#xf…...

什么是网络安全审计?网络安全审计的作用...

网络安全审计通过对网络数据的采集、分析、识别,实时动态监测通信内容、网络行为和网络流量,发现和捕获各种敏感信息、违规行为,实时报警响应,全面记录网络系统中的各种会话和事件,实现对网络信息的智能关联分析、评估…...

EasyExcel实现excel导入(模版上传)

目录 效果pom.xmlapplication.ymlcontrollerservice依赖类前台vue代码某个功能如果需要添加大量的数据,通过一条条的方式添加的方式,肯定不合理,本文通过excel导入的方式来实现该功能,100条数据导入成功85条,失败15条,肯定需要返回一个表格给前台或者返回1个错误excel给前…...

Vue 3最新组件解析与实践指南:提升开发效率的利器

目录 引言 一、Vue 3核心组件特性解析 1. Composition API与组件逻辑复用 2. 内置组件与生命周期优化 3. 新一代UI组件库推荐 二、高级组件开发技巧 1. 插件化架构设计 2. 跨层级组件通信 三、性能优化实战 1. 惰性计算与缓存策略 2. 虚拟滚动与列表优化 3. Tree S…...

【前端】如何安装配置WebStorm软件?

文章目录 前言一、前端开发工具WebStorm和VS Code对比二、官网下载三、安装1、开始安装2、选择安装路径3、安装选项4、选择开始菜单文件夹5、安装成功 四、启动WebStorm五、登录授权六、开始使用 前言 WebStorm 是一款由 JetBrains 公司开发的专业集成开发环境(IDE…...

vllm专题(一):安装-GPU

vLLM 是一个 Python 库,支持以下 GPU 变体。选择您的 GPU 类型以查看供应商特定的说明: 1. NVIDIA CUDA vLLM 包含预编译的 C++ 和 CUDA(12.1)二进制文件。 2. AMD ROCm vLLM 支持配备 ROCm 6.3 的 AMD GPU。 注意 此设备没有预构建的 wheel 包,因此您必须使用预构建的 Do…...

php文件包含

文章目录 基础概念php伪协议什么是协议协议的格式php中的协议file协议http协议ftp协议php://input协议php://filter协议php://data协议 php文件上传机制高级文件包含nginx文件日志包含临时文件包含session文件包含pear文件包含远程文件包含 基础概念 文件包含,相当…...

升级 SpringBoot3 全项目讲解 — Spring Boot 3 中如何发Http请求?

随着 Spring Boot 3 的发布,许多开发者开始考虑将他们的项目升级到这个新版本。Spring Boot 3 带来了许多新特性和改进,尤其是在 HTTP 请求处理方面。本文将详细介绍如何在 Spring Boot 3 中发送 HTTP 请求,并通过代码示例帮助你快速上手。 …...

分类预测 | MFO-LSSVM飞蛾扑火算法优化最小二乘支持向量机多特征分类预测Matlab实现

分类预测 | MFO-LSSVM飞蛾扑火算法优化最小二乘支持向量机多特征分类预测Matlab实现 目录 分类预测 | MFO-LSSVM飞蛾扑火算法优化最小二乘支持向量机多特征分类预测Matlab实现分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现MFO-LSSVM飞蛾扑火算法优化最小二…...

MyBatis Plus核心功能

一、条件构造器 1.为什么要学? 用于方便地构建SQL查询条件 2.如何使用? 3.实战案例 例:查询出名字中带o的,存款大于等于1000元的人的id,username,info,balance字段 数据库如图: 示例: Test void testL…...

nginx ngx_http_module(10) 指令详解

nginx ngx_http_module(10) 指令详解 nginx 模块目录 nginx 全指令目录 一、目录 1.1 模块简介 ngx_http_v2_module:HTTP/2支持模块,允许Nginx通过HTTP/2协议与客户端进行通信。HTTP/2带来了许多性能优化,如多路复用、头部压缩和服务器推…...

【ENSP】链路聚合的两种模式

【ENSP】链路聚合的两种模式 1、背景介绍2、链路聚合的使用场景3、配置过程1、手工模式Eth-Trunk配置2、静态LACP模式Eth-Trunk 4、总结 1、背景介绍 随着网络规模的不断扩大,人们对骨干链路的带宽吞吐量和可靠性提出了越来越高的要求。在传统方案中,为…...

Windows环境安装部署minimind步骤

Windows环境安装部署minimind步骤 必要的软件环境 git git,可下载安装版,本机中下载绿色版,解压到本地目录下(如:c:\soft\git.win64),可将此路径添加到PATH环境变量中,供其他程序…...

让大模型帮我设计crnn网络及可运行demo,gpt4o豆包qwendeepseek-r1

prompt 使用 crnn 提取图像特征,给出图像好坏的二分类结果,写清楚代码备注,注释清楚向量维度大小,并给出一个可运行的 demo1、GPT-4o 以下是一个使用 CRNN(Convolutional Recurrent Neural Network)提取图…...

代码随想录-- 第一天图论 --- 岛屿的数量

99 统计岛屿的数量 c 99. 岛屿数量 #include <iostream> #include <vector> #include <queue>using namespace std;struct MGraph {int numVertices, numEdges;vector<vector<int>> Edge; };int dir[4][2] {{1, 0}, {0, 1}, {-1, 0}, {0, -1}…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...