【oracle】user_cons_columns表中position的具体含义

本文解释了在Oracle数据库中,user_cons_columns表中的Position字段如何指示约束定义中各列的顺序,特别是在主键约束中。通过实例展示了当更改主键列顺序时Position的变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查询user_cons_columns表结构如下:

desc user_cons_columns;
Name            Type           Nullable Default Comments                                                                                         
--------------- -------------- -------- ------- ------------------------------------------------------------------------------------------------ 
OWNER           VARCHAR2(30)                    Owner of the constraint definition                                                               
CONSTRAINT_NAME VARCHAR2(30)                    Name associated with the constraint definition                                                   
TABLE_NAME      VARCHAR2(30)                    Name associated with table with constraint definition                                            
COLUMN_NAME     VARCHAR2(4000) Y                Name associated with column or attribute of object column specified in the constraint definition 
POSITION        NUMBER         Y                Original position of column or attribute in definition                                           

Owner 约束的所有者

Constraint_ Name 约束名

Table_Name 与约束关联的表名

Column_Name 与约束关联的列名

Position 约束定义中列的顺序

-- 这个  POSITION 是记录用户在创建约束(比如主键)时, 各个列的顺序
-- 观察一下这两个值 
SQL> 
SQL> col column_name format a30 ;
SQL> create table test(id int, name varchar2(10)) ;
Table created
SQL> alter table test add constraint PK_test primary key (id,name) ;
Table altered
SQL> select table_name, column_name,position
  2  from user_cons_columns where constraint_name = 'PK_TEST' ;
TABLE_NAME                     COLUMN_NAME                      POSITION
------------------------------ ------------------------------ ----------
TEST                           ID                                      1
TEST                           NAME                                    2
SQL> alter table test drop constraint PK_test ;
Table altered
SQL> alter table test add constraint PK_test primary key (name,id) ;
Table altered
SQL> select table_name, column_name,position
  2  from user_cons_columns where constraint_name = 'PK_TEST' ;
TABLE_NAME                     COLUMN_NAME                      POSITION
------------------------------ ------------------------------ ----------
TEST                           ID                                      2
TEST                           NAME                                    1
SQL> drop table test purge ;
Table dropped

也就是说,position就是指primary key (name,id) 中,name和id的位置,name是第一个,position就是1,id是第二个,position就是2。如果是primary key (id,name),那id对应的position就是1,name对应的position就是2。

注意,部分约束的position为空,例如not null,check。

参考:http://bbs.youkuaiyun.com/topics/392016882?page=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值