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

达梦数据库踩坑

提示:第一次接触达梦,是真的不好用,各种报错不提示详细信息,吐槽归吐槽,还是需要学习使用的。

前言

题主刚接触达梦数据库时,本来是想下载官网的连接工具进行数据库连接的,但是谁曾想,官网既然客户端和服务端集成到一块下载一个压缩包一个多G,题主大为不解。所以第一次使用客户端时,我选择了DBeaver工具。后面做代码本地测试时,才被迫下载了服务器端。

一、达梦和mysql创建database对比

对于mysql我们一般是通过ip地址、端口号、用户名、密码去在mysql的连接工具当中去连接,此时如果这个登录的账号有创建数据的权限是,我们可以直接通过new Database去新建数据库。对于达梦数据来说,我们也可以通过上述的四个参数去连接数据库。但是当我们创建数据库时,需要在达梦数据库的一个模式的目录下去创建,这个操作类似于mysql当中的new Database操作。在创建数据库时,需要勾选忽略大小写敏感。不然后续做数据查询时,默认使用的表名称是大写,如果表定义使用的小写就会报错。

二、spring boot连接达梦数据库出现的异常

Cause: dm.jdbc.driver.DMException:第4 行附近出现错误:无效的表或视图名:
在这里插入图片描述
对于spring配置达梦数据库连接时,题主第一次直接在原生的SYSDBA用户连接当中去创建了一个新的模式(即一个新的database)。在spring做数据库查询时就会爆出异常,后面查询得知达梦在查询时,如果用户名和模式名称一致时,查询语句不会拼接模式名称,例如:select * from user。
如果用户名和查询的模式不一致时,达梦默认查询时会默认带上用户名称对应的模式名称。例如如果我们通过SYSDBA登录,新建一个模式(库)TEST,然后在TEST当中新增表数据。spring在做数据查询时,就会报出上述的异常,因为达梦在做数据查询时,使用的sql是select * from SYSDBA.user。此时就会出现异常,所以我们需要给一个模式创建一个单独的用户,且模式的名称和用户名称要完全一致。

三、语法差异

对于创建一个表结构数据,自增主键id的设置和mysql的差异比较大,INT类型的数据不可以设置长度。对于字段的描述和表结构的描述也不可以在表定义上去设置。

-- 创建一个表
CREATE TABLE "mh_user" ("id" BIGINT IDENTITY(1, 1) PRIMARY KEY,"account" VARCHAR(20) NOT NULL,"actual_name" VARCHAR(16) NOT NULL,"company_id" BIGINT DEFAULT NULL,"department_id" BIGINT DEFAULT NULL,"email" VARCHAR(32) DEFAULT NULL,"employee_no" VARCHAR(32) DEFAULT NULL,"password" VARCHAR(64) NOT NULL,"password_status" INT NOT NULL,"enabled" TINYINT NOT NULL,"remark" TEXT,"create_by" INT DEFAULT NULL,"create_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,"update_by" INT DEFAULT NULL,"updated_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,"deleted" TINYINT NOT NULL DEFAULT 0
);
-- 设置表的备注信息
COMMENT ON TABLE "TEST"."mh_user" is '用户信息';
-- 添加字段注释
COMMENT ON COLUMN "mh_user"."id" IS '主键id';
COMMENT ON COLUMN "mh_user"."account" IS '用户名|账号';

总结

上述的问题就是题主在第一次接触达梦时遇到的坑,其实还有就是达梦数据库的语法和mysql语法的差异,主要记录一下解决方案,后续如果再遇到的话,可以快速的去修复。


http://www.mrgr.cn/news/31454.html

相关文章:

  • Sam Altman:年底将有重磅更新,但不是GPT-5!
  • Java 中使用Mockito 模拟对象的单元测试的快速示例
  • 光耦合MOSFET(Optocoupled MOSFET,简称OCMOS)
  • android dvr黑屏
  • 量化交易系统开发-实时行情自动化交易-3.4.2.2.Okex交易数据
  • React diff算法和Vue diff算法的主要区别
  • 线性规划中可行域为什么一定是凸的--证明
  • 前端框架对比选择:如何在众多技术中找到最适合你的
  • C++ 中noexcept关键字的含义和使用方法
  • shell脚本(9.20)
  • lettuce引起的Redis command timeout异常
  • 大数据新视界 --大数据大厂之AI 与大数据的融合:开创智能未来的新篇章
  • sql中的union与union all区别
  • 队列基础概念
  • 基于机器学习的癌症数据分析与预测系统实现,有三种算法,bootstrap前端+flask
  • 【读书笔记-《30天自制操作系统》-23】Day24
  • 每天五分钟计算机视觉:将人脸识别问题转换为二分类问题
  • 完美转发、C++11中与线程相关的std::ref
  • IDEA配置全局的maven环境
  • 《深度解析 C++中的拷贝构造函数:概念、作用与实践》
  • Vue学习记录之六(组件实战及BEM框架了解)
  • 渐变色代码主题你受得了吗
  • 固执和坚持99%的人不作区分
  • C++_CH18_构造函数与析构函数
  • 【宠粉赠书】大模型RAG实战:RAG原理、应用与系统构建
  • 每日奇难怪题(持续更新)