ALL_CONSTRAINTS 和 ALL_CONS_COLUMNS 中的所有者是否与 table 所有者相同?

Is the OWNER in ALL_CONSTRAINTS and ALL_CONS_COLUMNS the same as the table owner?

根据 Oracle,(ALL|USER|DBA)_CONSTRAINTS 中的 OWNER 字段是约束的所有者。为了与此约束所属的 table 相关,此视图提供 TABLE_NAME,但是为了唯一标识 table,我需要 table 的所有者和table 姓名。因为 *_CONSTRAINTS*_ALL_CONS_COLUMNS 视图没有 TABLE_OWNER 字段,这是否意味着约束所有者与 table 所有者相同?或者换句话说,约束只能由 table 的所有者添加吗?

does this mean that the constraint owner is the same as the table owner?

是的。


can a constraint only be added by the owner of the table?

不,它可以由另一个拥有 alter any table 权限的用户添加。其中之一是 SYS。这是一个例子:

以 Scott 的身份连接,我正在创建 table:

SQL> connect scott/tiger
Connected.
SQL> create table test (id number);

Table created.

以 SYS 身份连接并更改 Scott 的 table - 添加主键约束:

SQL> connect sys as sysdba

Enter password:
Connected.
SQL> alter table scott.test add constraint pk_test primary key (id);

Table altered.

回到斯科特,检查谁拥有什么:

SQL> select constraint_name, owner from all_constraints where table_name = 'TEST';

CONSTRAINT_NAME                OWNER
------------------------------ ------------------------------
PK_TEST                        SCOTT

SQL> select table_name, owner From all_tables where table_name = 'TEST';

TABLE_NAME                     OWNER
------------------------------ ------------------------------
TEST                           SCOTT

SQL>

如您所见,斯科特拥有一切