按名称删除唯一约束

Posted

技术标签:

【中文标题】按名称删除唯一约束【英文标题】:dropping unique constraint by name 【发布时间】:2012-08-30 16:15:43 【问题描述】:

在 Sybase Central 中删除唯一约束时,显示的删除语句如下;

ALTER TABLE "DBA"."enr_rds_heating_control_validation_t" DROP CONSTRAINT "ASA826";

ASA826 在此处删除的约束来自 SYS.SYSCONSTRAINT 视图,其中值来自约束名称列。

这里的问题是,这是 Sybase 分配给约束的唯一标识符,并且仅对当前数据库有效,因此当针对另一个数据库运行时,此约束可能 a) 不存在或 b) 完全是不同的约束。

然而,在创建约束时,我们将其命名为 enr_rds_heating_control_validation_t UNIQUE (enr_rds_heating_type_id,enr_rds_heating_control_id),该值可以在 index_name 列的 SYS.SYSINDEX 视图中看到,并且该值在所有数据库中都将保持唯一。

我已尝试删除通过 index_name 传递的约束来代替约束名称,并收到指示未找到约束的错误。

如何使用索引名称而不是约束名称来删除唯一约束?

【问题讨论】:

也许这不能回答您的问题,但您应该始终为您创建的每个约束分配一个明确的名称,这样您就不会遇到这样的情况。 【参考方案1】:

我认为您不能像删除索引一样删除约束,即使 Sybase 在物理上使用索引并且您在表上看到它作为 sp_help 报告的索引。

DROP INDEX 仅适用于使用 CREATE INDEX 创建的索引。用于你得到的约束:

不能将 DROP 与“abe.c”一起使用,因为“c”是一个约束。使用 ALTER TABLE。

听起来您想将 Sybase Central 创建的约束作为 SQL,然后批量使用 sql,但不是在 Sql 相关的数据库上 - 这不是您不能这样做的答案吗?

只要让使用此 Sql Central 输出的脚本“使用”正确的数据库,就可以了。

我无法准确理解您在做什么,但您似乎必须坚持使用 SQL Central 生成的内容。

或者后处理 Sql Central Sql 并在所有约束名称后缀 db_id()?不过这是一个疯狂的猜测

【讨论】:

是的,你是对的。要删除约束,您需要使用 alter table :)

以上是关于按名称删除唯一约束的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Oracle 中的列组合赋予唯一约束?

MYSQL中唯一约束和唯一索引的区别

oracle数据库添加,查询,删除唯一约束

mysql中唯一约束、key和索引的区别,unique key 就是唯一约束吗,新手麻烦指点,谢谢

MySQL增加查看删除唯一性约束

db2数据库创建删除主键约束和创建删除唯一键约束