面对刚接触的新领域,我们大多数人都会手足无措,一时之间不知道该从何下手,通常在这种时候,我们总会喜欢通过类比自己已经熟悉的概念来努力尝试走进这个新的领域。
有些刚从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; |
MySQL
的DML
有较多方便开发实现业务功能的语法(但使用不当通常会引发逻辑错误和性能问题),在 [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 |
不同的数据库通常有不同的实现方式,有些概念关系不一定有完全合适的对应。
查看达梦数据库官方文档 ↩︎
文章
阅读量
获赞