我已经为我在Oracle SQL中创建的多个表的每个约束定义了一个名称。
问题是要删除特定表的列的约束,我需要知道我为每个约束提供的名称,这是我忘记的。
如何列出我为表的每列指定的约束的所有名称?
这样做有SQL语句吗?
答案 0 :(得分:137)
您需要查询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>'
答案 1 :(得分:12)
SELECT * FROM USER_CONSTRAINTS
答案 2 :(得分:8)
也许这可以提供帮助:
SELECT constraint_name, constraint_type, column_name
from user_constraints natural join user_cons_columns
where table_name = "my_table_name";
欢呼声
答案 3 :(得分:7)
select constraint_name,constraint_type
from user_constraints
where table_name = 'YOUR TABLE NAME';
注意:表格名称应为大写字母。
如果您不知道表的名称,那么
select constraint_name,constraint_type,table_name
from user_constraints;
答案 4 :(得分:1)
企业数据库通常有多个用户,而我并不是一个正确的人:
SELECT * FROM ALL_CONSTRAINTS WHERE table_name = 'YOUR TABLE NAME' ;
答案 5 :(得分:0)
使用以下两个命令之一。一切都必须大写。表名必须用引号引起来:
--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';