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

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

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

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

这样做有 SQL 语句吗?

537398 次浏览
SELECT * FROM USER_CONSTRAINTS

您需要查询 数据字典,特别是 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>'
select constraint_name,constraint_type
from user_constraints
where table_name = 'YOUR TABLE NAME';

注意: 表名应大写。

如果你还不知道桌子的名字,

select constraint_name,constraint_type,table_name
from user_constraints;

也许这个能帮上忙:

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

干杯

使用下面两个命令中的任意一个。所有东西都要大写。表名必须用引号括起来:

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

企业数据库通常有多个用户,我并不总是在正确的用户上:

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

摘自 Oracle 文档

在 MySQL 中解决这个问题的一个简单方法是-

SHOW INDEXES IN <table-name>;

它显示约束的键名

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

一个内部连接 在 a.r _ 約束 _ name = b.約束 _ name 上