达梦SQL语法兼容笔记

1. DDL工具语法

查看库和表列表

# 查看所有数据库
select distinct object_name  from all_objects where object_type='SCH';
# 查看所有可见的表名:
SELECT table_name FROM all_tables;
# 查看用户可见的所有表
SELECT table_name FROM all_tables WHERE owner = 'schema_name';
# 查看当前连接的数据库名
SELECT sys_context('USERENV', 'DB_NAME') FROM dual;

查询环境参数:

# 查询字符集
SELECT value FROM v$nls_parameters WHERE parameter = 'NLS_CHARACTERSET';
# 查询达梦超时时间
SELECT profile_name, idle_time/60 AS idle_minutes FROM dmdba.dm_user_profiles WHERE profile_name = 'DEFAULT';
# 查看DM版本
select BUILD_VERSION from SYS.V$INSTANCE;
# 查询关键字
select * from V$RESERVED_WORDS;
# 查询页大小。除大字段外,一条记录大小不能超过一页
select page();
# 是否从服务器中取出大字段数据(disql)
SET LOBCOMPLETE <OFF(缺省值) | ON>

表结构:

# 类似于mysql中的show columns、show create table 语句
describe table_name
# 查询表的创建语句:
SELECT DBMS_METADATA.GET_DDL('TABLE', 'meet_conference', 'pc3') AS CREATE_STATEMENT FROM DUAL;
# 变更表结构:
ALTER TABLE meet_conference ADD (node INTEGER, parentConfId VARCHAR(255));

索引信息:

# 查询某张表的唯一索引
SELECT ui.index_name, uic.column_name FROM user_indexes ui JOIN user_ind_columns uic ON ui.index_name = uic.index_name WHERE ui.table_name = 'webcal_live_info' AND ui.uniqueness = 'UNIQUE';
# 联表查询某个用户的所有索引信息
select cc.*, c.* from dba_constraints c, dba_cons_columns cc where c.constraint_name = cc.constraint_name and c.owner = 'uc_uniform' and cc.table_name = 'uc_uniform';# 查询一个表的所有索引条件信息
select * from dba_constraints where table_name = 'conf_summary';
# 查询一个表的所有索引列字段信息
select * from dba_cons_columns where table_name = 'conf_summary';# 查询一个具体约束包含的列字段
select * from dba_cons_columns where constraint_name = 'CONS134225131';
# 查询一个具体约束的条件信息
select * from dba_constraints where constraint_name = 'CONS134225131';

2. 支持自增列插入值

方法:通过设置数据库参数IDENTITY_INSERT来实现。
示例:

SET IDENTITY_INSERT  ums.tang_ums_product ON WITH REPLACE NULL;   
INSERT INTO ums.tang_ums_product (id, name, url, "type") VALUES ('60000', '云会议', 'MeetNow', '0'); 
SET IDENTITY_INSERT  ums.tang_ums_product OFF;

3. 支持大字段比较

方法:修改数据库参数 ENABLE_BLOB_CMP_FLAG 为 1

ENABLE_BLOB_CMP_FLAG:是否支持大字段类型的比较。

  • 0:不支持;
  • 1:支持。

设置为 1 后支持 DISTINCT、ORDER BY、分析函数和集函数支持对大字段进行处理。

注意:该参数并不能支持 GROUP BY 对大字段进行处理。

4. 标识符的MySQL兼容

达梦中采用双引号来作为定界标识符,用双引号括起来时标识符体可以包含任意字符。定界标识符的例子:"table","A","!@#$"

在兼容 MYSQL 的模式下,定界标识符的标识符体除用双引号括起来外,还支持使用反引号进行定界或关键字的转义。如下面所示:

`TABLE_NAME``test`

MySQL的兼容模式可以通过修改dm.ini中数据库兼容参数解决:

COMPATIBLE_MODE=4

查看下数据库这个兼容性参数param_value的值:

select * from v$dm_ini where para_name='COMPATIBLE_MODE'

对于通过MySQL兼容模式来支持反引号这个功能,只有在8.1.3.37之后的版本中才支持,之前的版本只能去掉或者通过双引号。

5. disql命令行对引号的转义

以一个例子说明,如果密码是"aaaa"“aaaa”,则SQL语句中书写格式如下:
在这里插入图片描述

  • 最外层的三个双引号分别表示,将密码括起来的双引号,转移双引号,实际密码双引号;
  • 中间四个双引号分别表示转移双引号,第一个密码双引号,转移双引号,第二个密码双引号;

disql命令行连接数据的书写格式:
在这里插入图片描述

6. 引号转义规则

  • 如果是单引号,再加个单引号转义,用两个连续单引号转义成单引号
  • 如果是双引号,再加个双引号作转义,正规标识符不会包含双引号,有一种定界标识符可以有双引号(可以包含任意字符)
  • 其它特殊字符的转义与Mysql一致,例如:制表符、反斜杠、换行、回车
  • 单引号用来包裹字符串值(双引号不行),双引号用来包裹标识符,例如:字段名和表名。
  • Mysql的兼容:将’替换成’',将"替换成""
  • java的话,可以在驱动连接串加上?quoteReplace=1这个进行兼容

7. replace into语法转换

Mysql语法示例:

REPLACE INTO exchange_bindinfo (userId,resId,bindingData) 
values (1,"abcd","101003")

达梦语法示例:

MERGE INTO exchange_bindinfo t
USING dual
ON (t.userId = 1 AND t.resId = 'abcd')
WHEN MATCHED THENUPDATE SET t.bindingData = '101003'
WHEN NOT MATCHED THENINSERT (userId, resId, bindingData)VALUES (1, 'abcd', '101003');

8. 联表更新语句转换

Mysql语法

UPDATE TESTB LEFT JOIN TESTA 
ON TESTA.A = TESTB.A 
SET TESTB.B = TESTA.B;

达梦语法:

MERGE INTO TESTB 
USING TESTA 
ON (TESTA.A = TESTB.A)
WHEN MATCHED THEN UPDATE SET TESTB.B = TESTA.B

9. on duplicate key update语句转换

Mysql语法:

insert into webcal_live_info(cal_id,channelId,pullurl,password,extraInfo) values(634311,131722,'https://rlive1uat.rmeet.com.cn/activity/geeZWo3','','{"liveViewFlag":0,"livePlaybackFlag":0,"livePlaybackTime":0,"jointHostUrl":"https://stest.qsh1.cn/a/GVaZkX26ACE2"}') on duplicate key update password='', extraInfo='{"liveViewFlag":0,"livePlaybackFlag":0,"livePlaybackTime":0,"jointHostUrl":"https://stest.qsh1.cn/a/GVaZkX26ACE2"}'

达梦语法:

MERGE INTO webcal_live_info t
USING dual
ON (t.cal_id = 634311 AND t.channelId = 131722)
WHEN MATCHED THENUPDATE SET t.password = '', t.extraInfo = '{"liveViewFlag":0,"livePlaybackFlag":0,"livePlaybackTime":0,"jointHostUrl":"https://stest.qsh1.cn/a/GVaZkX26ACE2"}'
WHEN NOT MATCHED THENINSERT (cal_id, channelId, pullurl, password, extraInfo)VALUES (634311, 131722, NULL, '', '{"liveViewFlag":0,"livePlaybackFlag":0,"livePlaybackTime":0,"jointHostUrl":"https://stest.qsh1.cn/a/GVaZkX26ACE2"}');

10. 多条数据的on duplicate key update

Mysql语法:

INSERT INTO users (username, email, age)
VALUES ('user1', 'user1@example.com', 25),('user2', 'user2@example.com', 30),('user3', 'user3@example.com', 35)
ON DUPLICATE KEY UPDATEemail = VALUES(email),age = VALUES(age);

达梦语法:

MERGE INTO users u
USING (SELECT 'user1' AS username, 'user1@example.com' AS email, 25 AS age FROM dualUNION ALLSELECT 'user2', 'user2@example.com', 30 FROM dualUNION ALLSELECT 'user3', 'user3@example.com', 35 FROM dual
) d
ON (u.username = d.username)
WHEN MATCHED THENUPDATE SET u.email = d.email, u.age = d.age
WHEN NOT MATCHED THENINSERT (username, email, age) VALUES (d.username, d.email, d.age);

参考阅读

  • dm8 password转义:https://eco.dameng.com/community/question/276215ad690cd0310ce60ab368f48c0f
  • 达梦与mysql的引号兼容:https://eco.dameng.com/community/question/45ea31056858e8d877eb6395882e652f

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP安全问题:远程溢出、DoS、safe_mode绕过漏洞

一、Web 服务器安全 PHP 其实不过是 Web服务器的一个模块功能,所以首先要保证 Web服务器的安全。当 然 Web服务器要安全又必须是先保证系统安全,这样就扯远了, 无穷无尽。PHP可以和各种 Web 服务器结合,这里也只讨论 Apache。非常建议以 chroot 方式安装启动 Apache,这样…

磁盘空间占用巨大的meta.db-wal文件缓存(tracker-miner-fs索引服务)彻底清除办法

磁盘命令参考本博客linux磁盘空间满了怎么办. 问题: 磁盘空间被盗 今天瞄了一下我的Ubuntu系统盘&#xff0c; nftdiggernftdigger-Ubuntu:~$ df -h 文件系统 容量 已用 可用 已用% 挂载点 udev 16G 0 16G 0% /dev tmpfs 3.2G 1.9…

VUE获取当前日期的周日和周六

<template><div><div click"handleLast()">上一周</div><div click"handleNext()">下一周</div><el-calendarref"monChild"v-model"value":first-day-of-week"7":range"[sta…

2023.11.8 hadoop学习-概述,hdfs dfs的shell命令

目录 1.分布式和集群 2.Hadoop框架 3.版本更新 4.hadoop架构详解 5.页面访问端口 6.Hadoop-HDFS HDFS架构 HDFS副本 7.SHELL命令 8.启动hive服务 1.分布式和集群 分布式: 多台服务器协同配合完成同一个大任务(每个服务器都只完成大任务拆分出来的单独1个子任务)集 群:…

怎样在iOS手机上进行自动化测试

Airtest支持iOS自动化测试&#xff0c;在Mac上为iOS手机部署iOS-Tagent之后&#xff0c;就可以使用AirtestIDE连接设备&#xff0c;像连接安卓设备一样&#xff0c;实时投影、控制手机。iOS测试不仅限于真机测试&#xff0c;iOS模拟器也可以进行。Mac端上部署完成后还可以提供给…

CentOS 7 安装 Redis 5 (单机 6379)

CentOS 7 安装 Redis 5 &#xff08;单机 6379&#xff09; 自己准备好 Redis 5 的安装包并上传至 /opt/ 下的 redis 文件夹下&#xff1a; cd /opt mkdir redis cd redis准备好 Redis 所需的编译环境&#xff1a; yum -y install gcc yum -y install gcc-c解压上传的 Redis…

expo项目使用eas打包安卓上传时connect ETIMEDOUT和write EPIPE问题

之前使用指令&#xff1a;eas build -p android 上传安卓包都是顺利进行的 但是今天却报错&#xff1a; Failed to upload the project tarball to EAS Build Reason: request to https://storage.googleapis.com/. . . . . failed, reason: connect ETIMEDOUT 142.251.42.251…

在 EMR 上启用 DominantResourceCalculator

1. 说明 DominantResourceCalculator 仅工作于 capacity-scheduler 模式下,需要启用 capacity-scheduler,然后在其下面配置 DominantResourceCalculator。以下是 启用 DominantResourceCalculator 的 EMR Configuration 的 Json 内容 (注意:spark-defaults 部分配置用于通…

设计模式之组合模式-创建层次化的对象结构

目录 概述概念主要角色应用场景 组合模式的实现类图NS图基本代码组合模式的精髓意外收获&#xff08;❀❀&#xff09; 应用示例-公司组织架构管理需求结构图代码 组合模式的优缺点优点缺点 总结 概述 概念 组合模式是一种结构型设计模式&#xff0c;它允许将对象组合成树形结…

【Linux】 reboot 命令使用

reboot 命令用于用来重新启动计算机。 语法 reboot [参数] 命令选项及作用 执行令 man --reboot 执行命令结果 参数 -n : 在重开机前不做将记忆体资料写回硬盘的动作-w : 并不会真的重开机&#xff0c;只是把记录写到 /var/log/wtmp 档案里-d : 不把记录写到 /var/log…

【CUDA】算子编译错误ATen/ATen.h: No such file or directory

问题&#xff1a; 在Torch1.10环境下&#xff0c;build含CUDA算子编译的工程时出错&#xff1a; build命令&#xff1a; python setup.py build develop 错误&#xff1a; ATen/ATen.h: No such file or directory 分析&#xff1a; 出错的主要原因是用于编译算子的torch版…

拓世科技集团打造数字人营销解决方案,为车企提供新的“增长担当”

汽车&#xff0c;已经渐渐融入了现代人的日常生活&#xff0c;从高端的身份标志转变为普罗大众的出行选择&#xff0c;它驶入了千家万户&#xff0c;成为了我们日常出行的可靠伙伴&#xff0c;见证着人们的生活故事和时代的变迁。 中国汽车市场的蓬勃发展引起了业内外的广泛关…

设计模式-责任链模式(Chain of Responsibility)

设计模式-责任链模式&#xff08;Chain of Responsibility&#xff09; 一、责任链模式概述1.1 什么是责任链模式1.2 简单实现责任链模式1.3 使用责任链模式的注意事项 二、责任链模式的用途三、责任链模式实现方式3.1 基于接口实现责任链模式3.2 基于抽象类实现责任链模式3.3 …

解决Jenkins执行git脚本时报错:No such device or address问题

问题现象&#xff1a; Jenkins执行BeanShell脚本时&#xff0c;报错&#xff1a;jenkins fatal: could not read Username for http://112.11.120.1: No such device or address 解决方案&#xff1a; 解决服务器拉取git仓库的代码权限&#xff0c;使用高级子模块克隆功能。…

深入解析 Redis 分布式锁原理

一、实现原理 1.1 基本原理 JDK 原生的锁可以让不同线程之间以互斥的方式来访问共享资源&#xff0c;但如果想要在不同进程之间以互斥的方式来访问共享资源&#xff0c;JDK 原生的锁就无能为力了。此时可以使用 Redis 来实现分布式锁。 Redis 实现分布式锁的核心命令如下&am…

投票助手图文音视频礼物打赏流量主小程序开源版开发

投票助手图文音视频礼物打赏流量主小程序开源版开发 图文投票&#xff1a;用户可以发布图文投票&#xff0c;选择相应的选项进行投票。 音视频投票&#xff1a;用户可以发布音视频投票&#xff0c;观看音视频后选择相应的选项进行投票。 礼物打赏&#xff1a;用户可以在投票过…

cpu 支持内存带宽与内存最大长度的关系《鸟哥的 Linux 私房菜》

鸟哥的 Linux 私房菜 -- 计算机概论 -- 計算机&#xff1a;辅助人脑的好工具 同理&#xff0c;64 位 cpu 一次接受内存传递的 64bit 数据&#xff0c;内存字节地址用 64 位记录&#xff0c;最多能记录2^64个字节2^64Bytes2^34GB17179869184GB2^24TB&#xff0c;理论上&#xff…

Java后端开发——JDBC入门实验

JDBC&#xff08;Java Database Connectivity&#xff09;是Java编程语言中用于与数据库建立连接并进行数据库操作的API&#xff08;应用程序编程接口&#xff09;。JDBC允许开发人员连接到数据库&#xff0c;执行各种操作&#xff08;如插入、更新、删除和查询数据&#xff09…

计算机考研408有多难?25考研经验贴,开个好头很有必要

前言 大家好&#xff0c;我是陈橘又青&#xff0c;相信关注我的各位小伙伴们中&#xff0c;大多都是在计算机专业的大学生吧&#xff01; 每天都有许多人在后台私信我&#xff0c;问我要不要考研&#xff0c;我想说这个东西是因人而异的&#xff0c;像我本人就选择了就业&…