主键对应的约束名称

本文探讨了在SQL中重建主键时遇到的问题及解决方案,包括如何避免使用默认生成的主键名称,并通过指定表空间提高性能。通过示例代码展示了如何使用ALTER TABLE和ADD CONSTRAINT来实现这一目标。
如果使用
alter table tbl_1 add primary key (col_1);
这样创建的主键,其一对应的主键名/索引名不容易知道(是系统产生的名字:  SYS_C0010004 类似这样),其二索引和表放在一个表空间里面,对性能不利.
 
使用
ALTER TABLE tbl_1 ADD CONSTRAINT pk_tbl_1 PRIMARY KEY (col_1) USING INDEX  TABLESPACE tbl_idx;
可以避免上述缺点.
 
但如果原有的表是使用方法一创建的主键,再使用方法二重建时,需要先删除原来的主键及索引,名称不方便获取到.
这种情况,可以通过
select cu.*
from user_cons_columns cu, user_constraints au
where cu.constraint_name = au.constraint_name
and au.constraint_type = 'P'
and au.table_name = 'TBL_1';
来获取主键对应的约束的名称.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29512902/viewspace-1169943/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29512902/viewspace-1169943/

### 如何查询数据库中表的主键约束 在关系型数据库管理系统 (RDBMS) 中,主键是一种重要的约束机制,用于唯一标识表中的每一行数据。以下是几种常见 RDBMS 的查询方式: #### MySQL 数据库 对于 MySQL 数据库,可以通过 `INFORMATION_SCHEMA` 系统视图来查询某个表的主键信息。具体 SQL 语句如下: ```sql SELECT COLUMN_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = '目标表名' AND CONSTRAINT_NAME LIKE 'PRIMARY'; ``` 此查询会返回指定表的主键名称以及对应主键约束名称[^1]。 #### SQL Server 数据库 在 SQL Server 中,可以利用系统视图 `sys.key_constraints` 和 `sys.index_columns` 来查找主键信息。下面是一个示例查询: ```sql SELECT kc.name AS PK_Constraint_Name, COL_NAME(ic.object_id, ic.column_id) AS ColumnName FROM sys.key_constraints kc JOIN sys.indexes i ON kc.parent_object_id = i.object_id AND kc.unique_constraint_id = i.index_id JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id WHERE kc.type = 'PK' AND OBJECT_NAME(kc.parent_object_id) = '目标表名'; ``` 上述脚本能够提取出给定表上的所有主键列及其关联的约束名字[^2]。 #### PostgreSQL 数据库 如果是在 PostgreSQL 上操作,则可采用以下方法获取 public 架构下的任意表格是否存在复合(组合)主键情况: ```sql WITH pk_cols AS ( SELECT conrelid::regclass AS table_name, array_agg(attname ORDER BY ordinality) AS columns FROM pg_attribute a JOIN unnest(conkey) WITH ORDINALITY o(key_num, ordinality) USING (attnum), pg_constraint c WHERE contype='p' AND attrelid=c.conrelid GROUP BY conrelid ) SELECT *, CASE WHEN cardinality(columns)>1 THEN true ELSE false END as is_composite_pk FROM pk_cols; ``` 这段代码通过定义一个 CTE (`pk_cols`) 收集每个主键约束所涉及的所有字段列表;随后,在最终结果集中增加了一列标记该主键是否属于复合形式[^3]。 另外一种简单的方式适用于任何架构内的单张特定表: ```sql select a.attname as column_name from pg_index i join pg_class t on i.indrelid=t.oid join pg_attribute a on a.attnum=any(i.indkey) and a.attrelid=i.indrelid where t.relkind='r' -- regular tables only and i.indisprimary=true and t.relname='your_table_here'; ``` 以上介绍了三种流的关系型数据库产品关于检索主键设定状况的技术手段。每种实现都充分利用了各自平台特有的元数据存储结构特点来进行高效的数据挖掘工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值