达梦数据库索引删除操作小记

目录

问题背景

数据库类型:达梦

数据库版本:dm8

起因:在某个版本表中设置了主键,因为业务调整, 需要删除该主键处的索引

操作:在达梦数据库中查询索引名称并执行

sql 复制代码
DROP INDEX DATA_DAG.INDEX33557221;

报错:

txt 复制代码
SQL 错误 [22000]: 第2 行附近出现错误:
试图删除系统索引[INDEX33557221]

异常分析

异常原因

在达梦数据库中,当你为表创建 主键(PRIMARY KEY) 或 唯一约束(UNIQUE) 时,数据库系统会自动在后台创建一个同名的、或者以"INDEX"+数字命名的唯一索引来物理地保证数据的唯一性。

用户创建的索引:名称通常由用户自定义,如 IDX_CUSTOMER_NAME。

系统创建的索引:名称通常是自动生成的数字序列,比如 INDEX33557221。这个索引是某个表约束(主键或唯一约束)的物理实现。

达梦数据库中创建约束时,会自动创建索引以实现其约束需求:

text 复制代码
约束(逻辑概念) ← 绑定 → 索引(物理实现)
    ↑                             ↑
逻辑完整性保证              物理存储结构

在删除索引时,因为索引是为约束自动创建的,如果删除索引,约束无法保证唯一性。为了不让逻辑约束失效,系统阻止这一操作。

约束与索引的同步性:

text 复制代码
创建约束 → 自动创建索引 → 二者绑定
               ↓
           删除约束 → 自动删除索引(级联删除)
               ↓
           想删除索引? → 必须通过删除约束

解决方案

目标不是处理该索引,而是确定创建该索引的约束,并处理该约束

sql 复制代码
SELECT 
    a.OWNER AS 模式名,
    a.TABLE_NAME AS 表名,
    a.INDEX_NAME AS 索引名,
    a.UNIQUENESS AS 是否唯一,
    b.CONSTRAINT_NAME AS 约束名,
    b.CONSTRAINT_TYPE AS 约束类型
FROM ALL_INDEXES a
LEFT JOIN ALL_CONSTRAINTS b ON (a.OWNER = b.OWNER 
                                 AND a.INDEX_NAME = b.INDEX_NAME 
                                 AND a.TABLE_NAME = b.TABLE_NAME)
WHERE a.TABLE_NAME = 'asset_permit_history'
  AND a.OWNER = 'DATA_DAG'; 

关键字段解释:

  • CONSTRAINT_NAME: 关联的约束名称(例如 PK_EMPLOYEE)。
  • CONSTRAINT_TYPE:
    • P: 主键约束(Primary Key)
    • U: 唯一约束(Unique)

删除约束:

sql 复制代码
ALTER TABLE <模式名>.<表名> DROP CONSTRAINT <约束名>;

主键约束与唯一约束的区别:

方面 主键约束(P) 唯一约束(U)
语法形式 相同 相同
业务重要性 关键基础设施 业务规则约束
依赖关系 可能被多个外键引用 较少被引用
删除风险 高风险,需维护窗口 中低风险,可灵活安排
恢复必要性 必须立即重建 可选重建
影响范围 整个表及关联表 特定列
数据影响 破坏行唯一标识 允许列重复值

总结

操作流程检查表:

text 复制代码
[遇到系统索引 INDEXXXXXX]
       ↓
[查询关联约束] → ALL_CONSTRAINTS.INDEX_NAME = 'INDEXXXXXX'
       ↓
[分析约束类型] → P(主键) / U(唯一) / 其他
       ↓
[评估业务影响] → 删除后数据还能保持一致性吗?
       ↓
[检查依赖关系] → 是否有外键引用?
       ↓
[选择正确操作] → 删除约束 / 重建约束 / 其他
       ↓
[执行并验证] → 确认索引随约束正确变化

关键原则:

总是先查约束,再看索引

通过约束管理索引,而不是直接操作索引

理解业务需求:是要改规则(约束)还是改实现(索引)?

系统索引是数据库的"内部实现",用户应该通过公开接口(约束)操作


系统索引是约束的"影子",它存在的唯一意义就是为约束服务。处理影子本身没有意义(也不允许),必须处理产生影子的本体------约束。

相关推荐
爱学习的阿磊18 小时前
使用Fabric自动化你的部署流程
jvm·数据库·python
枷锁—sha18 小时前
【SRC】SQL注入快速判定与应对策略(一)
网络·数据库·sql·安全·网络安全·系统安全
惜分飞19 小时前
ORA-600 kcratr_nab_less_than_odr和ORA-600 4193故障处理--惜分飞
数据库·oracle
chian-ocean19 小时前
CANN 生态进阶:利用 `profiling-tools` 优化模型性能
数据库·mysql
m0_5500246319 小时前
持续集成/持续部署(CI/CD) for Python
jvm·数据库·python
AC赳赳老秦19 小时前
代码生成超越 GPT-4:DeepSeek-V4 编程任务实战与 2026 开发者效率提升指南
数据库·数据仓库·人工智能·科技·rabbitmq·memcache·deepseek
啦啦啦_999919 小时前
Redis-2-queryFormat()方法
数据库·redis·缓存
玄同76520 小时前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
吾日三省吾码20 小时前
别只会“加索引”了!这 3 个 PostgreSQL 反常识优化,能把性能和成本一起打下来
数据库·postgresql
chian-ocean20 小时前
百万级图文检索实战:`ops-transformer` + 向量数据库构建语义搜索引擎
数据库·搜索引擎·transformer