Oracle之主键的创建、添加、删除操作

 

一、创建表的同时创建主键约束

1.1、无命名

SQL> create table jack (id int primary key not null,name varchar2(20));

Table created

SQL> select table_name,index_name from user_indexes where table_name='JACK';

TABLE_NAME                     INDEX_NAME
------------------------------ ------------------------------
JACK                           SYS_C0011100

1.2、有命名

SQL> create table jack (id int ,name varchar2(20),constraint ixd_id primary key(id));

Table created

SQL> select table_name,index_name from user_indexes where table_name='JACK';

TABLE_NAME                     INDEX_NAME
------------------------------ ------------------------------
JACK                           IXD_ID

二、向表中添加主键约束

SQL> create table jack as select * from dba_objects;

Table created

SQL> desc jack;
Name           Type          Nullable Default Comments
-------------- ------------- -------- ------- --------
OWNER          VARCHAR2(30)  Y
OBJECT_NAME    VARCHAR2(128) Y
SUBOBJECT_NAME VARCHAR2(30)  Y
OBJECT_ID      NUMBER        Y
DATA_OBJECT_ID NUMBER        Y
OBJECT_TYPE    VARCHAR2(19)  Y
CREATED        DATE          Y
LAST_DDL_TIME  DATE          Y
TIMESTAMP      VARCHAR2(19)  Y
STATUS         VARCHAR2(7)   Y
TEMPORARY      VARCHAR2(1)   Y
GENERATED      VARCHAR2(1)   Y
SECONDARY      VARCHAR2(1)   Y
NAMESPACE      NUMBER        Y
EDITION_NAME   VARCHAR2(30)  Y                         

SQL> alter table jack add constraint pk_id primary key(object_id);

Table altered

SQL> select table_name,index_name from user_indexes where table_name='JACK';

TABLE_NAME                     INDEX_NAME
------------------------------ ------------------------------
JACK                           PK_ID

----另外当索引创建好以后再添加主键的效果:

SQL> create table jack as select * from dba_objects;

Table created

SQL> create index ind_object_id on jack(object_id);

Index created

SQL> select table_name,index_name from user_indexes where table_name='JACK';

TABLE_NAME                     INDEX_NAME
------------------------------ ------------------------------
JACK                           IND_OBJECT_ID

SQL> desc jack;
Name           Type          Nullable Default Comments
-------------- ------------- -------- ------- --------
OWNER          VARCHAR2(30)  Y
OBJECT_NAME    VARCHAR2(128) Y
SUBOBJECT_NAME VARCHAR2(30)  Y
OBJECT_ID      NUMBER        Y
DATA_OBJECT_ID NUMBER        Y
OBJECT_TYPE    VARCHAR2(19)  Y
CREATED        DATE          Y
LAST_DDL_TIME  DATE          Y
TIMESTAMP      VARCHAR2(19)  Y
STATUS         VARCHAR2(7)   Y
TEMPORARY      VARCHAR2(1)   Y
GENERATED      VARCHAR2(1)   Y
SECONDARY      VARCHAR2(1)   Y
NAMESPACE      NUMBER        Y
EDITION_NAME   VARCHAR2(30)  Y                         

SQL> alter table jack add constraint pk_id primary key(object_id);

Table altered

SQL> desc jack;
Name           Type          Nullable Default Comments
-------------- ------------- -------- ------- --------
OWNER          VARCHAR2(30)  Y
OBJECT_NAME    VARCHAR2(128) Y
SUBOBJECT_NAME VARCHAR2(30)  Y
OBJECT_ID      NUMBER
DATA_OBJECT_ID NUMBER        Y
OBJECT_TYPE    VARCHAR2(19)  Y
CREATED        DATE          Y
LAST_DDL_TIME  DATE          Y
TIMESTAMP      VARCHAR2(19)  Y
STATUS         VARCHAR2(7)   Y
TEMPORARY      VARCHAR2(1)   Y
GENERATED      VARCHAR2(1)   Y
SECONDARY      VARCHAR2(1)   Y
NAMESPACE      NUMBER        Y
EDITION_NAME   VARCHAR2(30)  Y                         

SQL> select table_name,index_name from user_indexes where table_name='JACK';

TABLE_NAME                     INDEX_NAME
------------------------------ ------------------------------
JACK                           IND_OBJECT_ID

三、修改主键约束

3.1、禁用/启用主键

SQL> select a.table_name,a.index_name,b.constraint_name,b.constraint_type,b.status from user_indexes a,user_constraints b where b.table_name='JACK'and a.table_name=b.table_name;

TABLE_NAME                     INDEX_NAME                     CONSTRAINT_NAME                CONSTRAINT_TYPE STATUS
------------------------------ ------------------------------ ------------------------------ --------------- --------
JACK                           PK_ID                          PK_ID                          P               ENABLED

SQL> alter table jack disable primary key;

Table altered

SQL> select a.table_name,a.index_name,b.constraint_name,b.constraint_type,b.status from user_indexes a,user_constraints b where b.table_name='JACK'and a.table_name=b.table_name;

TABLE_NAME                     INDEX_NAME                     CONSTRAINT_NAME                CONSTRAINT_TYPE STATUS
------------------------------ ------------------------------ ------------------------------ --------------- --------

SQL> alter table jack enable primary key;

Table altered

SQL> select a.table_name,a.index_name,b.constraint_name,b.constraint_type,b.status from user_indexes a,user_constraints b where b.table_name='JACK'and a.table_name=b.table_name;

TABLE_NAME                     INDEX_NAME                     CONSTRAINT_NAME                CONSTRAINT_TYPE STATUS
------------------------------ ------------------------------ ------------------------------ --------------- --------
JACK                           PK_ID                          PK_ID                          P               ENABLED

3.2、重命名主键

SQL> select a.table_name,a.index_name,b.constraint_name,b.constraint_type,b.status from user_indexes a,user_constraints b where b.table_name='JACK'and a.table_name=b.table_name;

TABLE_NAME                     INDEX_NAME                     CONSTRAINT_NAME                CONSTRAINT_TYPE STATUS
------------------------------ ------------------------------ ------------------------------ --------------- --------
JACK                           PK_ID                          PK_ID                          P               ENABLED

SQL> alter table jack rename constraint pk_id to pk_jack_id;

Table altered

SQL> select a.table_name,a.index_name,b.constraint_name,b.constraint_type,b.status from user_indexes a,user_constraints b where b.table_name='JACK'and a.table_name=b.table_name;

TABLE_NAME                     INDEX_NAME                     CONSTRAINT_NAME                CONSTRAINT_TYPE STATUS
------------------------------ ------------------------------ ------------------------------ --------------- --------
JACK                           PK_ID                          PK_JACK_ID                     P               ENABLED

四、删除表中已有的主键约束

4.1、无命名

----先利用user_cons_columns表查得主键名:
SQL> select owner,constraint_name,table_name,column_name from user_cons_columns where table_name = 'JACK';

OWNER                          CONSTRAINT_NAME                TABLE_NAME                     COLUMN_NAME
------------------------------ ------------------------------ ------------------------------ ----------------
JACK                           SYS_C0011105                   JACK                           ID
SQL> select table_name,index_name from user_indexes where table_name='JACK';

TABLE_NAME                     INDEX_NAME
------------------------------ ------------------------------
JACK                           SYS_C0011105
SQL> alter table jack drop constraint SYS_C0011105;

Table altered

4.2、有命名

SQL> select owner,constraint_name,table_name,column_name from user_cons_columns where table_name = 'JACK';

OWNER                          CONSTRAINT_NAME                TABLE_NAME                     COLUMN_NAME
------------------------------ ------------------------------ ------------------------------ ------------------------
JACK                           IXD_ID                         JACK                           ID

SQL> alter table jack drop constraint IXD_ID;

Table altered

SQL> select owner,constraint_name,table_name,column_name from user_cons_columns where table_name = 'JACK';

OWNER                          CONSTRAINT_NAME                TABLE_NAME                     COLUMN_NAME
------------------------------ ------------------------------ ------------------------------ ------------------------
 

转帖 Oracle 主键的处理方法 http://www.cnblogs.com/Richardzhu/p/3470929.html的更多相关文章

  1. oracle 主键自增 设置----杜恩德

    <div id="topicList"> <div class="forFlow"> <div class = "pos ...

  2. oracle主键自增

    oracle主键自增 1建立数据表 create table Test_Increase(            userid number(10) primary key,  /*主键,自动增加*/ ...

  3. oracle 主键应用序列和触发器实现自动增长

    oracle 主键自动增长 这几天搞Oracle,想让表的主键实现自动增长,查网络实现如下: create table simon_example ( id number(4) not null pr ...

  4. oracle 主键自动增长

    oracle 主键自动增长 2009-12-11 16:07:00|  分类: 数据库资料|字号 订阅     这几天搞Oracle,想让表的主键实现自动增长,查网络实现如下: create tabl ...

  5. Oracle主键异常处理

    Hibernate: insert into test1.WarnWeather (WAREA, wdate, WDAYS, WINFO, WTYPE, WNO) values (?, ?, ?, ? ...

  6. Spring中新建记录后返回自增主键的处理方法

    接手一个旧系统改造的过程,要插入后立即返回自增值,不能重构guid类型主键,Spring提供了很优美的机制. Spring利用GeneratedKeyHolder,提供了一个可以返回新增记录对应主键值 ...

  7. oracle主键修改&设置某一字段可以为null

    1.oracle主键修改 1.1)首先查看需要修改的表的主键名,默认的情况下,数据库会自动分配 select * from user_cons_columns where table_name='表名 ...

  8. mysql insert一条记录后 返回创建记录主键id的方法

    mysql插入数据后返回自增ID的方法 mysql和oracle插入的时候有一个很大的区别是,oracle支持序列做id,mysql本身有一个列可以做自增长字段,mysql在插入一条数据后,如何能获得 ...

  9. oracle 主键生成策略-sequence序列+trigger触发器

    oracle中设置表的主键字段为自增序列(实例)1.首先创建一个表(如日志表) //删除库表中存在的日志表drop table S_LOG_INFO cascade constraints;//新建日 ...

随机推荐

  1. 安卓手机ADB驱动干什么的?

    Adb驱动是什么意思? /div> Adb是英文Android Debug Bridge的英文缩写,是debug工具,如果不是写IT的可能也很难理解debug的意思.说的直白一点就是Adb就是手 ...

  2. PHP常见面试题汇总(二)

    PHP常见面试题汇总(二)   //第51题:统计一维数组中所有值出现的次数?返回一个数组,其元素的键名是原数组的值;键值是该值在原数组中出现的次数 $array=array(4,5,1,2,3,1, ...

  3. QT插件+ROS 3 导入现有ROS包

    http://blog.csdn.net/u013453604/article/details/52167213#t5

  4. shell编程之测试和判断

    一.测试 程序运行中经常需要根据实际情况来运行特定的命令或代码段.比如判断某个文件或目录是否存在,如果文件或目录不存在,可能首先创建文件或目录.举例说,要判断文件/var/log/mlocate文件是 ...

  5. java 适配器模式(adapter pattern)

    适配器就是一种适配中间件,它存在于不匹配的二者之间,用于连接二者,将不匹配变得匹配. 场景:电脑读取内存卡中的内容,内存卡是没有办法直接插在电脑的USB接口上,那就不需要一个转换器. 下面的例子实现了 ...

  6. <转>聊聊持续集成

    从别处看到了一篇关于持续集成的文章,个人感觉蛮不错的,分享给大家... 原文链接:对于持续集成实践的常见问题解答 1.什么是持续集成? 集成,就是一些孤立的事物或元素通过某种方式集中在一起,产生联系, ...

  7. javaweb1(小学生四则运算)

    一.设计思想 ①设计三个页面,分别为题数设置页面,题目显示页面以及结果显示页面. ②设计题数设置页面. ③从题数设置页面接收题数,作为循环次数. ④利用随机数生成相应符合条件表达式,并存入数据库. ⑤ ...

  8. Emacs 番茄钟 pomidor

    Windows 10 pomidor:https://github.com/TatriX/pomidor alert :https://github.com/jwiegley/alert toaste ...

  9. [01-01] 示例:用Java爬取新闻

    1.分析url <空港双流>数字报刊,访问地址为:http://epaper.slnews.net.cn,现在为了抓取每篇新闻的网页内容. 在浏览器访问该链接后,发现链接出现了变化,看样子 ...

  10. Redis详解(六)------ RDB 持久化

     前面我们说过,Redis 相对于 Memcache 等其他的缓存产品,有一个比较明显的优势就是 Redis 不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,has ...