注册
从 MySQL 到 DM对比学习
培训园地/ 文章详情 /

从 MySQL 到 DM对比学习

JC 2023/02/22 2813 4 0

面对刚接触的新领域,我们大多数人都会手足无措,一时之间不知道该从何下手,通常在这种时候,我们总会喜欢通过类比自己已经熟悉的概念来努力尝试走进这个新的领域。

有些刚从MySQL转过来的朋友,因为不太熟悉 [DM][达梦数据库官方文档] 的使用方式,经常会提出诸如「MySQL的 xx 功能在 [DM][达梦数据库官方文档] 怎么实现?」、「MySQL的 xx 对象应该对应 [DM][达梦数据库官方文档] 里面的什么对象?」之类的问题。在此,我通过例举MySQL和 [DM][达梦数据库官方文档] 的一些对应[1]关系,希望能在一些地方帮助到大家。

元数据

元数据:描述数据的数据,对数据及信息资源的描述性信息。数据库元数据可以用来了解数据库内部的数据结构,常见的数据库元数据有模式(库)、表、列、视图、触发器、存储过程等数据库对象。

相关命令 MySQL 达梦
show databases/schemas information_schema.schemata all_users
show tables information_schema.tables user_tables
desc table_name information_schema.columns user_tab_columns
show full columns from table_name information_schema.columns user_tab_comments
show processlist information_schema.processlist v$sessions
show create show create table sysdba.t1 select dbms_metadata.get_ddl(‘table’,‘t1’,‘sysdba’)

常用函数

函数大部分情况会使用在查询语句中。函数名在各个数据库厂商之间具有较大差异的部分,下面例举部分比较常用的函数作为参考。

函数名 MySQL 达梦
group_concat select group_concat© as l from (select 1 as c union all select 2) t SELECT listagg(c, ‘,’) within GROUP(ORDER BY c) AS l from (select 1 as c union all select 2) t
find_in_set SELECT find_in_set(‘c’, ‘a,b,c,d’) AS l with #t as
(select regexp_substr(‘a,b,c,d’, ‘[^,]+’, 1, level) as e, level as l
from dual
connect by level <= regexp_count(‘a,b,c,d’, ‘,’) + 1)
select l
from #t
where e = ‘c’;
if select if(1=2,‘Y’,‘N’) as r select decode(1,2,‘Y’,‘N’) as r;
if(非等值) select if(1>2,‘√’,‘x’) select case when 1>2 then ‘√’ else ‘x’ end
last_insert_id select last_insert_id() select @@identity;
md5 select md5(‘123’) select to_char(md5(‘123’));
date_add/date_sub select date_add(now(),interval 1 day) as da, date_sub(now(),interval 1 minute) as ds; select now()+1 as da, now()-1.0/24/60 as ds;

DML语法

MySQLDML有较多方便开发实现业务功能的语法(但使用不当通常会引发逻辑错误和性能问题),在 [DM][达梦数据库官方文档] )中也基本都能找到类似的实现,但通常不推荐使用。

功能简述 MySQL 达梦
replace into replace into test (code,number,age) values (2,100,15); MERGE INTO table1
USING (SELECT 2 code, 100 “number”, 15 age
FROM dual) t
ON (table1.code = t.code)
WHEN MATCHED THEN
UPDATE
SET table1.“number” = t.“number”, table1.age = t.age
WHEN NOT MATCHED THEN
INSERT
(code, “number”, age)
VALUES
(t.code, t.“number”, t.age)
insert ignore into insert ignore into tb_test(id,name) values (1,‘dm’) insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(tb_test(id)) */ into tb_test(id,name)values(1,‘dm’)
on duplicate key update INSERT INTO mrowupdate(id,cnt) VALUES (3, ‘SuperMan’) on duplicate key update cnt=‘SuperMan’; MERGE INTO mrowupdate AS t1
USING (SELECT 3 id, ‘SuperMan’ cnt
FROM dual) AS t2
ON t1.id = t2.id
WHEN MATCHED THEN
UPDATE
SET t1.cnt = t2.cnt
WHEN NOT MATCHED THEN
INSERT
VALUES (3, ‘SuperMan’);

对象关系

[DM][达梦数据库官方文档] 中的数据库对象大多与Oracle类似,与MySQL却有不少概念上的不同,但实现的功能基本上都大同小异。

涉及命令 MySQL 达梦
数据库 <——> 模式 show databases SELECT sch.name FROM sysobjects sch WHERE sch.“TYPE$” = ‘SCH’
事件 <——> 代理 show events SELECT * FROM sysjob.sysjobs
查询日志 <——> sqllog show variables like ‘general_log%’; SELECT * FROM v$DM_INI WHERE para_name LIKE ‘SVR_LOG%’
慢查询日志 <——> 最近1000条慢SQL mysql.slow_log SELECT * FROM SYS.“V$LONG_EXEC_SQLS”
超级管理员 <——> 系统管理员 root SYSDBA

常用工具

该部分主要例举官方安装程序bin目录下的命令行工具,主要用于数据库的初始化、启动、连接、导出、导入、查询等功能。

功能简述 MySQL 达梦
mysql mysql -uroot -pxxx disql SYSDBA/SYSDBA
mysqld mysqld --defaults-file=xxx dmserver path=/xxx/dm.ini
mysql_install_db(已弃用) mysqld --initialize --datadir=xxx --basedir=xxx dminit path=xxx
mysqldump mysqldump -uroot -pxxx db_name dexp SYSDBA/SYSDBA schemas=xxx
mysqlimport mysqlimport -uroot -pxxx yyy.sql dimp SYSDBA/SYSDBA file=yyy.dmp
查询工具 MySQL Workbench(第三方:Navicat/Datagrip/SQLyog) DM管理工具

配置文件

该部分包括默认的配置文件名称、常用参数信息、常用环境变量等信息。

配置名称 MySQL 达梦
主配置文件 my.ini dm.ini
实例端口 my.ini —> port dm.ini –> port_num
数据目录/实例目录 my.ini —> datadir dm.ini –> system_path
软件目录/DM_HOME my.ini —> basedir $DM_HOME(如未配置该环境变量,则为数据库软件安装目录 —> dmdbms/)
实例日志/错误日志 my.ini —> log-error $DM_HOME/log/dm_实例名_年份月份.log

  1. 不同的数据库通常有不同的实现方式,有些概念关系不一定有完全合适的对应。
    查看达梦数据库官方文档 ↩︎

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服