达梦8数据库

达梦8数据库一些目前暂时令我头大的问题以及应对策略

where 条件后面跟case when 条件失效的问题。

例如where case when id is not null then ‘exam_type = 1’ else ‘1 = 1’ end:
按照过去的使用情况来看,这条语句的实际查询条件要么是 where exam_type = 1 要么是 where 1 = 1。
但是结果是都不是,失效。
无法理解,无法解决,只好换一个思路,尝试用if替代一下:
if(id is not null, exam_type = 1,1),但是依然报错(无法解析的成员访问表达式[IF])。
再次尝试优化:
if(id is not null, if(exam_type = 1, 1, 0), 1)
ok成功了。

数据的迁移和备份问题

蚌埠住,实在是蚌埠住,首先,一定切记不要使用SYSDBA去创建模式使用,大坑。
其次,不同版本的客户端导出的dmp文件是没法去用相同的办法复原的。
要么用dts迁移工具迁移,要么用sql脚本去复原。

我的需求是,我需要初始正式环境的数据,我的问题是,我无法用可视化界面连接到正式环境(堡垒机),但是测试环境的达梦数据库版本和正式环境的又不一致,而项目的数据初始化又只能在测试环境进行,所以我只能在测试环境做成备份文件去正式环境还原。
dts可视化界面没法用(x),不可抗力,无法直接连接到正式环境。
sql脚本复原不想用(x),导出的文件太大,哪怕压缩也有3个GB多,不太想用。
笨办法:
在本地的虚拟机上装一个和正式环境一模一样的达梦数据库,然后利用dts可视化工具,迁移数据到虚拟机上的达梦数据库,然后在达梦数据库上做备份,再拿这个备份文件到正式环境做还原。
指令:
先进入bin目录下,工具都在这个目录

 cd /dmdbs/bin

备份指令

./dexp USERID=root/password DIRECTORY=/xxx/backup FILE=exam-20230905-239.dmp SCHEMAS="exam" TABLESPACE=Y DROP=N GRANTS=N NOLOGFILE=Y COMPRESS=Y

上面这条指令中,需要自己修改自己的用户名和密码USERID,以及备份文件所在目录DIRECTORY,以及备份文件名FILE,还有需要备份的模式名SCHEMAS,COMPRESS=Y代表开启压缩,节省磁盘空间和传输时间。

还原指令

./dimp USERID=root/password DIRECTORY=/xxx/backup FILE=exam-20230905-239.dmp  IGNORE=N COMPILE=Y INDEXFIRST=N TABLE_FIRST=N COMMIT_ROWS=5000 FAST_LOAD=N LOG=imp.log LOG_WRITE=N

和备份指令部分参数相似,注意,这里的还原指令,我没有加SCHEMAS="exam"这条。

group by 的问题

用惯了mysql之后,用其他sql数据库group by很不习惯。
原因嘛,不必多说,在查询的时候可以搭配 exists 关键字使用
例如:

        select *
        from teacher_base a left join teacher_update u on a.id = u.id
        where exists (
            select 1 from (
                select a.id
                from teacher_base a left join teacher_work w on w.teacher_id = a.id
                group by a.id
        ) e
        where e.id = a.id
        )

order by 的问题

记录一下一个同事问我的问题
order by的字段的值里存在null的情况的时候,这些null的数据行会排在最上面。
我提供的思路是,按这个字段做一个if判断之后的排序。
例如,假设create_time存在null的情况,做排序

select * from t where 1=1 order by create_time

这样就全寄了,create_time为null的数据行肯定在最上面。
修改:

select * from t order by if(create_time is null or length(create_time)<=0 or length(create_time)is null, 1, 0), create_time

附上dm官方文档连接:https://eco.dameng.com/document/dm/zh-cn/sql-dev/practice-func.html
----------------------------------------------------------20230908-------------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值