我确实看到了这篇关于预言机约束的文章。我想扩展它以使其更好并提出一些问题。
用户限制。我添加了 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
为什么表中缺少外键?外键是什么意思?
您一次问了几个问题。一些注释和答案:
表名并不总是大写。这并不常见,但是您可以创建类似的表格
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