oracle 检查所有约束问题

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

我确实看到了这篇关于预言机约束的文章。我想扩展它以使其更好并提出一些问题。

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

用户限制。我添加了 UPPER,这样我就不必记住使用大写字母。

SELECT *
  FROM user_constraints
 WHERE table_name = UPPER('table_name');

所有限制。我添加了 UPPER,这样我就不必记住使用大写字母。

SELECT *
  FROM all_constraints
 WHERE table_name = UPPER('table_name');

如果您有一个像 toad 这样不错的数据库程序,这也很有用。这不必是大写字母。

describe table_name;

如果您使用像 sqlplus 这样的程序,我确实注意到这两个命令输出不可读。我在sqlplus中找不到

CONSTRAINT_TYPE
。我确实在
u
下找到了
INVALID VIEW_RELATED   ORIGIN_CON_ID
的独特之处。您可以做些什么来使其更具可读性吗?

SELECT *
  FROM all_constraints
 WHERE table_name = UPPER('table_name');

SELECT *
  FROM user_constraints
 WHERE table_name = UPPER('table_name');

如果您处于具有相似表名称的企业环境中,我认为这会很有用。我做错了什么吗?我得到的表格甚至不以

t
开头。

SELECT *
FROM all_constraints cons, all_cons_columns cols
WHERE cols.table_name like UPPER('Table_name%');

我注意到这适用于主键。

SELECT column_name FROM all_cons_columns WHERE constraint_name = (
  SELECT constraint_name FROM user_constraints 
  WHERE UPPER(table_name) = UPPER('table_name') AND CONSTRAINT_TYPE = 'P'
);

SELECT column_name FROM all_cons_columns WHERE constraint_name = (
  SELECT constraint_name FROM all_constraints 
  WHERE UPPER(table_name) = UPPER('table_name') AND CONSTRAINT_TYPE = 'P'
);

我注意到这不适用于唯一键。为什么会这样?

SELECT column_name FROM all_cons_columns WHERE constraint_name = (
  SELECT constraint_name FROM user_constraints 
  WHERE UPPER(table_name) = UPPER('table_name') AND CONSTRAINT_TYPE = 'U'
);

SELECT column_name FROM all_cons_columns WHERE constraint_name = (
  SELECT constraint_name FROM all_constraints 
  WHERE UPPER(table_name) = UPPER('table_name') AND CONSTRAINT_TYPE = 'U'
);

这是错误消息。

[Error] Execution (60: 3): ORA-01427: single-row subquery returns more than one row

我找到了这个关于约束的表。主键和唯一键有什么区别?

Check constraint on a table
是什么意思?其余的限制意味着什么? https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/ALL_CONSTRAINTS.html

C - Check constraint on a table

P - Primary key

U - Unique key

R - Referential integrity

V - With check option, on a view

O - With read only, on a view

H - Hash expression

F - Constraint that involves a REF column

S - Supplemental logging

为什么表中缺少外键?外键是什么意思?

oracle
1个回答
0
投票

您一次问了几个问题。一些注释和答案:

表名并不总是大写。这并不常见,但是您可以创建类似的表格

CREATE TABLE "Table_name" (...

学习正确的连接表达式。

SELECT *
FROM all_constraints cons, all_cons_columns cols
WHERE cols.table_name like UPPER('Table_name%');

执行交叉联接,即联接两个表中的每个记录。

更好的使用例如:

SELECT TABLE_NAME, CONSTRAINT_NAME, column_name 
FROM all_cons_columns cols
   JOIN all_constraints cons ON cols.OWNER = cons.OWNER and cols.CONSTRAINT_NAME = cons.CONSTRAINT_NAME
WHERE TABLE_NAME = UPPER('table_name') 
   AND CONSTRAINT_TYPE = 'P';

外键是 CONSTRAINT_TYPE

R

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