达梦数据库

达梦数据库(DM Database)是由武汉达梦数据库有限公司研发的一款国产数据库管理系统。

DM8是达梦公司在总结DM系列产品研发与应用经验的基础上,坚持开放创新、简洁实用的理念,推出的新一代自研数据库。DM8吸收借鉴当前先进新技术思想与主流数据库产品的优点,融合了分布式、弹性计算与云计算的优势,对灵活性、易用性、可靠性、高安全性等方面进行了大规模改进,多样化架构充分满足不同场景需求,支持超大规模并发事务处理和事务-分析混合型业务处理,动态分配计算资源,实现更精细化的资源利用、更低成本的投入。一个数据库,满足用户多种需求,让用户能更加专注于业务发展。

与其他数据库的比较

  • 与Oracle的比较:达梦数据库在功能和性能上与Oracle等国际主流数据库相当,但在价格和售后服务方面具有优势,尤其在国产化替代项目中表现出色。
  • 与MySQL的比较:相比之下,MySQL虽然在开源和社区支持方面有优势,但达梦数据库在事务处理和高并发支持方面更为强大,同时提供了更全面的企业级特性和支持服务。

安装参考:

https://www.kdocs.cn/l/cp9qqC228P4d

达梦数据库生态系统全景图

  • 核心组件 
    • DM Server(核心数据库引擎)
    • DM Manager(图形化管理工具)
    • DM Studio(开发调试工具)
    • 数据迁移工具(dexp/dimp、DTS)
    • 高可用组件(数据守护、主备集群)
  • 适用场景 
    • 事务处理(OLTP)、分析型(OLAP)、混合负载(HTAP)。
    • 国产化替代场景(兼容Oracle语法)。

使用:

一、建表案例(DDL)
1. 基础建表
-- 达梦语法
CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR2(50) NOT NULL,
    salary NUMBER(10,2) CHECK (salary > 0),
    hire_date DATE DEFAULT SYSDATE,
    dept_id INT,
    CONSTRAINT fk_dept FOREIGN KEY (dept_id) REFERENCES departments(id)
);

-- MySQL对比
CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    salary DECIMAL(10,2) CHECK (salary > 0),
    hire_date DATE DEFAULT CURRENT_DATE,
    dept_id INT,
    FOREIGN KEY (dept_id) REFERENCES departments(id)
);

差异点

  • 达梦使用 VARCHAR2(兼容Oracle),MySQL用 VARCHAR
  • 达梦默认日期函数为 SYSDATE,MySQL为 CURRENT_DATE
  • 达梦支持显式命名约束(CONSTRAINT fk_dept),MySQL可省略。
2. 自增列实现
-- 达梦语法
CREATE TABLE products (
    product_id INT IDENTITY(1,1) PRIMARY KEY,
    product_name VARCHAR2(100)
);

-- MySQL对比
CREATE TABLE products (
    product_id INT AUTO_INCREMENT PRIMARY KEY,
    product_name VARCHAR(100)
);

差异点

  • 达梦使用 IDENTITY 关键字,MySQL使用 AUTO_INCREMENT
  • 达梦可通过序列(Sequence)实现复杂自增逻辑。
二、DML操作
1. 插入数据
-- 达梦语法
INSERT INTO employees (id, name, salary) VALUES (1, '张三', 8000.00);

-- MySQL对比(语法一致)
INSERT INTO employees (id, name, salary) VALUES (1, '张三', 8000.00);
2. 更新数据
-- 达梦语法
UPDATE employees SET salary = salary * 1.1 WHERE dept_id = 10;

-- MySQL对比(语法一致)
UPDATE employees SET salary = salary * 1.1 WHERE dept_id = 10;
3. 删除数据
-- 达梦语法
DELETE FROM employees WHERE id = 1;

-- MySQL对比(语法一致)
DELETE FROM employees WHERE id = 1;
三、DQL操作
1. 分页查询
-- 达梦语法(ROWNUM)
SELECT * FROM (
    SELECT A.*, ROWNUM RN 
    FROM employees A 
    WHERE ROWNUM <= 20
) WHERE RN > 10;

-- MySQL对比(LIMIT)
SELECT * FROM employees 
ORDER BY id 
LIMIT 10, 10;  -- 跳过10行,取10行
2. 连接查询
-- 达梦特有:外连接操作符(*)
SELECT e.name, d.dept_name 
FROM employees e, departments d 
WHERE e.dept_id = d.id(+);  -- (+)表示左外连接

-- MySQL标准语法
SELECT e.name, d.dept_name 
FROM employees e 
LEFT JOIN departments d ON e.dept_id = d.id;
与MySQL的关键差异

功能

达梦数据库

MySQL

数据类型

VARCHAR2NUMBERDATE

VARCHARDECIMALDATETIME

自增列

IDENTITY 或序列(Sequence)

AUTO_INCREMENT

分页查询

ROWNUM 或 FETCH NEXT

LIMIT offset, count

字符串连接

`

事务隔离级别

默认 READ COMMITTED

默认 REPEATABLE READ

存储过程语法

兼容Oracle PL/SQL

自有语法,不兼容Oracle

使用过程总结
1. 数据类型映射
  • 达梦的 NUMBER 对应MySQL的 DECIMAL,避免直接使用 FLOAT
  • 达梦的 DATE 包含日期和时间,MySQL的 DATE 仅含日期,需用 DATETIME 替代。
2. SQL语法兼容性
  • 大小写敏感:达梦默认区分大小写(需用双引号包裹),MySQL默认不区分。
  • 分页逻辑:达梦需用 ROWNUM 子查询,MySQL直接使用 LIMIT
  • 空值处理:达梦用 NVL(expr1, expr2),MySQL用 IFNULL(expr1, expr2)
3. 工具与命令
  • 命令行工具:达梦用 disql,MySQL用 mysql
  • 备份恢复:达梦用 dexp/dimp,MySQL用 mysqldump
  • 执行计划:达梦用 EXPLAIN,MySQL用 EXPLAIN,但输出格式不同。
4. 性能优化
  • 索引优化:达梦支持函数索引,MySQL需避免在索引列使用函数。
  • 绑定变量:达梦推荐使用绑定变量减少硬解析,MySQL自动优化更灵活。
  • 事务控制:达梦默认提交需显式 COMMIT,MySQL默认自动提交。
常见问题解决
  1. 自增列冲突
    • 达梦需手动创建序列(Sequence)管理复杂自增逻辑,MySQL依赖表属性。
    • 示例:
CREATE SEQUENCE seq_product_id START WITH 1 INCREMENT BY 1;
INSERT INTO products VALUES (seq_product_id.NEXTVAL, '商品A');
  1. 日期隐式转换错误
    • 达梦需用 TO_DATE('2023-01-01', 'YYYY-MM-DD'),MySQL直接支持 '2023-01-01'
  2. 外键约束删除
    • 达梦需显式添加 CASCADE CONSTRAINTS
DROP TABLE employees CASCADE CONSTRAINTS;
总结

达梦数据库在语法和功能上更接近Oracle,适合需要高安全性、兼容国产化场景的用户。通过了解上述内容可以快速掌握达梦数据库的核心操作,并规避迁移或开发中的兼容性问题。

与MySQL相比,需重点关注以下差异:

  • 数据类型VARCHAR2 ↔ VARCHARNUMBER ↔ DECIMAL
  • 分页语法ROWNUM ↔ LIMIT
  • 自增列IDENTITY ↔ AUTO_INCREMENT
  • 事务与锁:默认隔离级别不同,需根据业务调整。

工具使用详解

  • DM Manager
    • 图形化创建表、用户、监控性能。
    • 导入/导出数据(支持CSV、Excel)。
  • disql命令行
    • 连接语法、脚本执行(@script.sql)。
    • 格式化输出(SET LINESIZESET PAGESIZE)。
  • 监控工具
    • 动态视图(V$SESSIONV$SYSTEM_EVENT)。
    • 性能监控面板(DM Studio)。

安全与权限管理

  • 用户与角色
-- 创建角色并授权
CREATE ROLE analyst;
GRANT SELECT ON employees TO analyst;
-- 分配角色给用户
GRANT analyst TO user_zhangsan;
  • 三权分立模式
    • 启用三权分立(ENABLE_TRIPLE=Y),分离系统管理员、安全管理员、审计管理员权限。
  • 数据加密
    • 透明加密表空间:
CREATE TABLESPACE encrypted_ts DATAFILE '/dmdata/encrypted_ts.dbf' ENCRYPT;

性能优化与监控

  • 关键优化手段
    • 索引优化
-- 创建组合索引
CREATE INDEX idx_emp_dept_salary ON employees(dept_id, salary);
    • 参数调优
      • 修改dm.ini中的MEMORY_TARGET(内存自动管理)。
      • 调整FAST_POOL_PAGES(快速缓存池大小)。
  • 监控命令
-- 查看当前会话
SELECT * FROM V$SESSION;
-- 查看慢查询
SELECT * FROM V$SYSTEM_LONG_EXEC_SQLS;

迁移与兼容性指南

  • 从MySQL迁移
    • 使用dmsql工具转换SQL语法(如LIMITROWNUM)。
    • 数据迁移工具:dexp(导出) + dimp(导入)。
  • 兼容模式
    • 启用Oracle兼容模式(COMPATIBLE_MODE=1):
# 修改dm.ini
COMPATIBLE_MODE = 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值