128

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

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

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

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

4

7 回答 7

179

您需要查询数据字典,特别是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>'
于 2012-08-09T09:21:42.033 回答
18
SELECT * FROM USER_CONSTRAINTS
于 2012-08-09T08:15:48.263 回答
13

也许这可以帮助:

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

干杯

于 2014-04-02T12:46:07.107 回答
9
select constraint_name,constraint_type 
from user_constraints
where table_name = 'YOUR TABLE NAME';

注意:表名应该大写。

如果您不知道表的名称,

select constraint_name,constraint_type,table_name 
from user_constraints;
于 2014-01-07T11:46:42.487 回答
6

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

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

Oracle 文档中挑选

于 2019-08-29T08:29:28.413 回答
1

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

--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';
于 2018-10-02T22:13:48.370 回答
-1

在 MySQL 中一个简单的方法是 -

SHOW INDEXES IN <table-name>;

它显示了约束的键名

于 2021-11-29T15:09:43.857 回答