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

问题描述 投票:0回答:8

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

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

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

有这样做的SQL语句吗?

sql oracle oracle11g constraints
8个回答
203
投票

您需要查询数据字典,特别是

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>'

18
投票
SELECT * FROM USER_CONSTRAINTS

14
投票

也许这可以帮助:

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

干杯


10
投票

企业数据库通常有多个用户,而我不会远离正确的用户:

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

摘自 Oracle 文档


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;

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';

1
投票
select a.constraint_name   as f_key,
   a.owner             as f_owner,
   a.table_name        as f_table,
   a.r_constraint_name as p_key,
   a.r_owner           as p_owner,
   b.table_name        as p_table
from all_constraints a inner join all_constraints b
                     on a.r_constraint_name = b.constraint_name

-2
投票

在 MySQL 中实现此目的的一个简单方法是 -

SHOW INDEXES IN <table-name>;

它显示了约束的键名称

© www.soinside.com 2019 - 2024. All rights reserved.