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

目录

问题背景

数据库类型:达梦

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

关键原则:

总是先查约束,再看索引

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

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

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


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

相关推荐
!chen1 天前
Oracle 高风险锁等待快速诊断手册
数据库·oracle
保定公民1 天前
DMDRS数据库同步用户最小权限脚本示例
数据库·sql·达梦数据库·数据同步·dmdrs·同步权限
2501_941822751 天前
从数据库分片到水平扩展的互联网工程语法实践与多语言探索
数据库
QUST-Learn3D1 天前
geometry4Sharp Ray-Mesh求交 判断点是否在几何体内部
服务器·前端·数据库
运维行者_1 天前
跨境企业 OPM:多币种订单与物流同步管理,依靠网络自动化与 snmp 软件
大数据·运维·网络·数据库·postgresql·跨境企业
gf13211111 天前
制作卡点视频
数据库·python·音视频
子超兄1 天前
慢查询处理SOP
数据库
TDengine (老段)1 天前
TDengine C/C++ 连接器入门指南
大数据·c语言·数据库·c++·物联网·时序数据库·tdengine
地球资源数据云1 天前
2019-2024年中国逐年10米分辨率最大值合成NDVI数据集
大数据·运维·服务器·数据库·均值算法