我为在 Oracle SQL 中创建的多个表的每个约束定义了一个名称。
问题是要删除特定表的列的约束,我需要知道我为每个约束提供的名称,但我已经忘记了。
如何列出我为表的每一列指定的所有约束名称?
是否有任何 SQL 语句可以这样做?
您需要查询 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>'
SELECT * FROM USER_CONSTRAINTS
也许这可以帮助:
SELECT constraint_name, constraint_type, column_name
from user_constraints natural join user_cons_columns
where table_name = "my_table_name";
干杯
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 * FROM ALL_CONSTRAINTS WHERE table_name = 'YOUR 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 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
从 all_constraints a 内部连接 all_constraints b on a.r_constraint_name = b.constraint_name
在 MySQL 中一个简单的方法是 -
SHOW INDEXES IN <table-name>;
它显示了约束的键名
USER_CONS_COLUMNS
owner
字段是约束的所有者,而不是表的所有者(根据 Oracle 文档)。在这两个视图中,表所有者都不是可用字段。这是否意味着约束所有者和表所有者必须相同?UPPERCASE
中,这是强制性的。否则存在表将显示类似no rows selected
的错误。