Oracle技术:基于主键和唯一约束的显示索引控制

从Oracle9i开始,主键创建时的索引和唯一性约束可以在建表时独立定义。

随后,约束可以被独立drop,而索引可以保留。这是Oracle9i中对于索引增强的几个特性之一。

SQL> CREATE TABLE employees

2  (

3    empno NUMBER(6),

4    NAME VARCHAR2(30),

5    dept_no NUMBER(2),

6    CONSTRAINT emp_pk PRIMARY KEY(empno)

7      USING INDEX

8      (CREATE UNIQUE INDEX emp_pk_idx ON employees(empno))

9  );

Table created.

SQL> select index_name,UNIQUENESS from user_indexes

2  where table_name=upper('employees');

INDEX_NAME                     UNIQUENES

------------------------------ ---------

EMP_PK_IDX                     UNIQUE

SQL> select CONSTRAINT_NAME,CONSTRAINT_TYPE,INDEX_NAME from user_constraints

2  where table_name=upper('employees');

CONSTRAINT_NAME                C INDEX_NAME

------------------------------ - ------------------------------

更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

EMP_PK                         P EMP_PK_IDX

Oracle9i中新增的命令可以用以DROP约束保留索引.

ALTER TABLE employees DROP PRIMARY KEY KEEP INDEX;

SQL> ALTER TABLE employees DROP PRIMARY KEY KEEP INDEX;

Table altered.

SQL> select index_name,UNIQUENESS from user_indexes

2  where table_name=upper('employees');

INDEX_NAME                     UNIQUENES

------------------------------ ---------

EMP_PK_IDX                     UNIQUE

对于隐式创建的主键索引,同样可以使用此种方式保留:

SQL> CREATE TABLE employees

2  (

3    empno NUMBER(6) primary key,

4    NAME VARCHAR2(30),

5    dept_no NUMBER(2)

6  );

Table created.

SQL> ALTER TABLE employees DROP PRIMARY KEY KEEP INDEX;

Table altered.

SQL> select index_name,UNIQUENESS from user_indexes

2  where table_name=upper('employees');

INDEX_NAME                     UNIQUENES

------------------------------ ---------

SYS_C004180                    UNIQUE

作者:51cto博客 Oracle小混子

时间: 2024-08-02 21:14:28

Oracle技术:基于主键和唯一约束的显示索引控制的相关文章

SQLServer主键和唯一约束的区别_MsSql

首先说明一点,主键又称主键约束,它也是一种约束,看下它和唯一约束的创建语法: alter table Person add constraint PK_Id primary key (Id) alter table Person add constraint UQ_Name unique (Name) 主键和唯一约束都要求字段值唯一,除此外,它们还有如下区别: ·同一张表只能有一个主键,但能有多个唯一约束: ·主键字段值不能为NULL,唯一约束字段值可以为NULL: ·主键字段可以做为其他表的外

SQLServer主键和唯一约束的区别

首先说明一点,主键又称主键约束,它也是一种约束,看下它和唯一约束的创建语法: alter table Person add constraint PK_Id primary key (Id) alter table Person add constraint UQ_Name unique (Name) 主键和唯一约束都要求字段值唯一,除此外,它们还有如下区别: ·同一张表只能有一个主键,但能有多个唯一约束: ·主键字段值不能为NULL,唯一约束字段值可以为NULL: ·主键字段可以做为其他表的外

oracle 数据按主键删除慢问题的解决方法_oracle

问题描述: 根据表主键id删除一条数据,在PL/SQL上执行commit后执行时间都大于5秒.!!! 问题分析: 需求是删除一个主表A,另有两个附表建有此表的主键ID的外键.删除A表的数据级联删除另两个表的关联数据.增删改查使用hibernate实现. 一开始一直以为是hibernate的内部处理上有关联操作导致的删除和更新数据缓慢.所以将原先使用hibernate的saveOrupdate方法,改查jdbc的 sql语句来处理update和delete数据操作.但是依然没效果!!! 怀疑数据库

如何解决Oracle GoldenGate 没有主键的问题?

如何解决Oracle GoldenGate 没有主键的问题? 本站文章除注明转载外,均为本站原创: 转载自love wife & love life -Roger 的Oracle技术博客 本文链接地址: 如何解决Oracle GoldenGate 没有主键的问题? 针对没有主键的情况,GoldenGate大概提供了3种方案,大致如下: 1.默认使用所有列当主键,通过keycols来实现,这种其实存在一定的问题,在这次的项目中直接否定. 2.通过在源端表中添加ogg_key_id列的方式来实现,这

link 环境下定义了主键再定义唯一字段,那么是不是会冲突?

问题描述 link 环境下定义了主键再定义唯一字段,那么是不是会冲突? link 环境下定义了主键再定义唯一字段,那么是不是会冲突? 解决方案 不会,参考http://www.cnblogs.com/ShadowLoki/archive/2013/09/09/3310419.html

OCP1z0-047 :主键与唯一索引

主键包括非空和唯一约束,它会自动创建唯一索引(注:唯一约束也会自动创建唯一索引),测试如下: 1. 创建一个表products gyj@OCM> Create table products( 2  product_id number(6) constraintprod_id_pk PRIMARY KEY, 3  product_name varchar2(15) 4  ); Table created. 2. 查表products的索引 gyj@OCM> select INDEX_NAME,I

在Mysql,SqlServer及Oracle中设置主键自动增长

1.把主键定义为自动增长标识符类型 在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值.例如: create table customers(id int auto_increment primary key not null, name varchar(15)); insert into customers(name) values("name1"),("name2"); select id from customers;

Oracle与Mysql主键、索引及分页的区别小结_oracle

区别: 1.主键,Oracle不可以实现自增,mysql可以实现自增. oracle新建序列,SEQ_USER_Id.nextval 2.索引: mysql索引从0开始,Oracle从1开始. 3.分页, mysql: select * from user order by desc limit n ,m. 表示,从第n条数据开始查找,一共查找m条数据. Oracle:select * from user select rownum a * from ((select * from user)a

oracle的主键约束添加删除

oracle的主键约束添加删除 1.创建表的同时创建主键约束一.无命名create table accounts (accounts_number number primary key,accounts_balance number);二.有命名 create table accounts (accounts_number number primary key,accounts_balance number,constraint yy primary key(accounts_number));