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

目录

问题背景

数据库类型:达梦

数据库版本: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(唯一) / 其他
       ↓
[评估业务影响] → 删除后数据还能保持一致性吗?
       ↓
[检查依赖关系] → 是否有外键引用?
       ↓
[选择正确操作] → 删除约束 / 重建约束 / 其他
       ↓
[执行并验证] → 确认索引随约束正确变化

关键原则:

总是先查约束,再看索引

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

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

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


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

相关推荐
2301_8174973314 分钟前
自然语言处理(NLP)入门:使用NLTK和Spacy
jvm·数据库·python
TimberWill32 分钟前
常用sql【pgsql】——建表相关
数据库·sql
herinspace37 分钟前
管家婆分销软件中如何进行现金流量分配
运维·服务器·数据库·学习·电脑
麦聪聊数据41 分钟前
LiveOps事故零容忍:游戏行业数据库的细粒度权限管控与审计实践
运维·数据库·后端·sql
敲敲千反田1 小时前
MySQL复习
数据库·mysql
SelectDB技术团队1 小时前
上市大模型企业数据基础设施的选择:MiniMax 基于阿里云 SelectDB 版,打造全球统一AI可观测中台
数据库·数据仓库·人工智能·ai·apache
小宇的天下1 小时前
Calibre :SVRF rule file example
java·开发语言·数据库
JSU_曾是此间年少1 小时前
ubuntu安装2026最新版Mysql(截止到1月底)
数据库·mysql
我真的是大笨蛋1 小时前
MVCC解析
java·数据库·spring boot·sql·mysql·设计模式·设计规范
hcnaisd21 小时前
使用Python进行PDF文件的处理与操作
jvm·数据库·python