在 Oracle SQL 中显示表的所有约束的名称

Posted

技术标签:

【中文标题】在 Oracle SQL 中显示表的所有约束的名称【英文标题】:Display names of all constraints for a table in Oracle SQL 【发布时间】:2012-08-06 10:20:15 【问题描述】:

我已经为我在 Oracle SQL 中创建的多个表的每个约束定义了一个名称。

问题是要删除特定表的列的约束,我需要知道我为每个约束提供的名称,但我已经忘记了。

如何列出我为表的每一列指定的所有约束名称?

是否有任何 SQL 语句可以这样做?

【问题讨论】:

【参考方案1】:

您需要查询data dictionary,特别是USER_CONS_COLUMNS 视图以查看表列和相应的约束:

SELECT *
  FROM user_cons_columns
 WHERE table_name = '<your table name>';

仅供参考,除非您专门使用小写名称(使用双引号)创建表名,否则表名将默认为大写,因此请确保在您的查询中如此。

如果您希望查看有关约束本身的更多信息,请查询USER_CONSTRAINTS 视图:

SELECT *
  FROM user_constraints
 WHERE table_name = '<your table name>'
   AND constraint_name = '<your constraint name>';

如果表保存在不是您的默认架构的架构中,那么您可能需要将视图替换为:

all_cons_columns

all_constraints

添加到 where 子句:

   AND owner = '<schema owner of the table>'

【讨论】:

错字:USER_CONS_COLUMNS 我认为 区分大小写;它应该是大写的。 (user|all|dba)_constraints 和 (user|all|dba)_cons_columns 中的 owner 字段是约束的所有者,而不是表的所有者(根据 Oracle 文档) .在这两个视图中,表所有者都不是可用字段。这是否意味着约束所有者和表所有者必须相同?【参考方案2】:
SELECT * FROM USER_CONSTRAINTS

【讨论】:

这不会给你列名 使用 all_constraints【参考方案3】:

也许这会有所帮助:

SELECT constraint_name, constraint_type, column_name
from user_constraints natural join user_cons_columns
where table_name = "my_table_name";

干杯

【讨论】:

【参考方案4】:
select constraint_name,constraint_type 
from user_constraints
where table_name = 'YOUR TABLE NAME';

注意:表名必须大写。

如果你不知道表的名称,

select constraint_name,constraint_type,table_name 
from user_constraints;

【讨论】:

【参考方案5】:

企业数据库通常有多个用户,而我并不喜欢正确的用户:

SELECT * FROM ALL_CONSTRAINTS WHERE table_name = 'YOUR TABLE NAME' ;

选自Oracle documentation

【讨论】:

【参考方案6】:

使用以下两个命令之一。一切都必须大写。表名必须用引号引起来:

--SEE THE CONSTRAINTS ON A TABLE
SELECT COLUMN_NAME, CONSTRAINT_NAME FROM USER_CONS_COLUMNS WHERE TABLE_NAME = 'TBL_CUSTOMER';

--OR FOR LESS DETAIL
SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'TBL_CUSTOMER';

【讨论】:

【参考方案7】:

mysql 中一个简单的方法是 -

SHOW INDEXES IN <table-name>;

它显示了约束的键名

【讨论】:

以上是关于在 Oracle SQL 中显示表的所有约束的名称的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据库 操作语句中的disable约束条件是仕么意思?有和作用?

在SQL中,如何用ALTER命令删除表中所有完整性约束,然后再用ALTER命令建立

Oracle如何添加主键约束

oracle怎么查询所有的表有没有主键

在oracle中如何查询一张表的所有数据结构,包括字段,视图,索引,约束

oracle 中查看一张表是不是有主键,主键在哪个字段上的语句怎么查如要查aa表,请写两句分别回答