精华内容
下载资源
问答
  • 继续昨天的折腾(Oracle修改主键约束),删掉主键约束后,发现唯一索引并未删掉。仔细看了下,主键约束跟唯一索引名称不一样,这说明是先创建了唯一索引,后创建的主键约束。我们来试验下: SQL> create unique ...

      继续昨天的折腾(Oracle修改主键约束),删掉主键约束后,发现唯一索引并未删掉。仔细看了下,主键约束跟唯一索引名称不一样,这说明是先创建了唯一索引,后创建的主键约束。我们来试验下:

    SQL> create unique index PK_T_INVITEE_RECORD_TEST on T_INVITEE_RECORD_TEST(INVITEEMSISDN, INVITERMSISDN, ACTIVITYID) tablespace TBS_VCODE_IDX;
     
    Index created
    SQL> alter table T_INVITEE_RECORD_TEST add constraint SYS_C00133333 PRIMARY KEY (INVITEEMSISDN, INVITERMSISDN, ACTIVITYID);
     
    Table altered
    

      这时候如果删除主键约束SYS_C00133333的话,唯一索引PK_T_INVITEE_RECORD_TEST不会自动删除:

    SQL> alter table T_INVITEE_RECORD_TEST drop constraint SYS_C00133333;
     
    Table altered
    

     

      这时候如果我们再次创建新的主键约束的话,有两种情况:一是不指定索引表空间(不建议),那么可以创建成功,但唯一索引被丢到数据表空间了;二是指定索引表空间,很明显,Oracle不会让你创建的,因为唯一索引已经存在,当然你也可以把主键约束的名字起得跟已存在的唯一索引的名字不一样的,但那样也不是我们想要的结果,因为老唯一索引必须要删掉。我们先看第二种情况:

    SQL> alter table T_INVITEE_RECORD_TEST add constraint PK_T_INVITEE_RECORD_TEST PRIMARY KEY (INVITEEMSISDN, INVITERMSISDN, ACTIVITYID,ACCEPTINVITETIME) using index tablespace TBS_VCODE_IDX;
     
    alter table T_INVITEE_RECORD_TEST add constraint PK_T_INVITEE_RECORD_TEST PRIMARY KEY (INVITEEMSISDN, INVITERMSISDN, ACTIVITYID,ACCEPTINVITETIME) using index tablespace TBS_VCODE_IDX
     
    ORA-00955: 名称已由现有对象使用
     
    SQL> alter table T_INVITEE_RECORD_TEST add constraint SYS_C00133333 PRIMARY KEY (INVITEEMSISDN, INVITERMSISDN, ACTIVITYID,ACCEPTINVITETIME) using index tablespace TBS_VCODE_IDX;
     
    Table altered
    

      我们的目的是修改唯一索引,新增一个ACCEPTINVITETIME字段,现在老的唯一索引仍存在,会导致我们新索引失效,不同的ACCEPTINVITETIME值仍无法插入。我们先删掉主键约束,再来看第一种情况:

    SQL> alter table T_INVITEE_RECORD_TEST drop constraint SYS_C00133333;
     
    Table altered
     
    SQL> alter table T_INVITEE_RECORD_TEST add constraint SYS_C00133333 PRIMARY KEY (INVITEEMSISDN, INVITERMSISDN, ACTIVITYID,ACCEPTINVITETIME);
     
    Table altered
    

      我们看到唯一索引建到数据表空间去了,作为一个专业人士,这是很不专业的。那么怎么解决掉老唯一索引呢?很简单,drop掉,你可以直接用

    drop index PK_T_INVITEE_RECORD_TEST;
    

      但更简单的是使用级联:

    alter table T_INVITEE_RECORD_TEST drop constraint SYS_C00133333 cascade drop index;
    

      下面给出专业的更新和回滚语句:

      新增联合主键字段ACCEPTINVITETIME

    alter table T_INVITEE_RECORD_TEST drop primary key cascade drop index;
    alter table T_INVITEE_RECORD_TEST modify ACCEPTINVITETIME not null;
    comment on column T_INVITEE_RECORD_TEST.ACCEPTINVITETIME is '接受邀请时间(联合主键)';
    alter table T_INVITEE_RECORD_TEST add constraint PK_T_INVITEE_RECORD_TEST PRIMARY KEY (INVITEEMSISDN, INVITERMSISDN, ACTIVITYID,ACCEPTINVITETIME) using index tablespace TBS_VCODE_IDX;
    

      回滚:

    alter table T_INVITEE_RECORD_TEST drop constraint PK_T_INVITEE_RECORD_TEST;
    alter table T_INVITEE_RECORD_TEST add constraint PK_T_INVITEE_RECORD_TEST PRIMARY KEY (INVITEEMSISDN, INVITERMSISDN, ACTIVITYID) using index tablespace TBS_VCODE_IDX;
    alter table T_INVITEE_RECORD_TEST modify ACCEPTINVITETIME null;
    comment on column T_INVITEE_RECORD_TEST.ACCEPTINVITETIME is '接受邀请时间'; 
    
    展开全文
  • oracle“删除”主键约束的方法有两个 1:alter table 表名 drop primary key; 这个是把主键从表中去除,而不是真正的删除主键 例子: 创建表:create table test_table_students (student_id number not null,...

    oracle“删除”主键约束的方法有两个<write by SnowShana / qq:449394683>


    1:alter table 表名 drop primary key;

    这个是把主键从表中去除,而不是真正的删除主键

    例子:

    创建表:create table test_table_students (student_id number not null,student_name varchar(20) not null,student_telephone long not null);

    创建主键:alter table test_table_students add constraint test_key_students primary key (student_id,student_name);

    第一次插入数据:insert into test_table_students (student_id,student_name,student_telephone) values (1,'alice',136133);

    第二次插入数据:insert into test_table_students (student_id,student_name,student_telephone) values (1,'peter',136133); 提示主键约束

    第三次插入数据:insert into test_table_students (student_id,student_name,student_telephone) values (2,'alice',136133); 提示主键约束

    删除主键约束:alter table test_table_students drop primary key;

    第四次插入数据:insert into test_table_students (student_id,student_name,student_telephone) values (1,'peter',136134); 插入成功

    第五次插入数据:insert into test_table_students (student_id,student_name,student_telephone) values (2,'alice',136135); 插入成功

    删除刚才两行数据:delete from test_table_students where student_telephone=136134;delete from test_table_students where student_telephone=136135;

    第二次添加主键约束:alter table test_table_students add constraint test_key_students primary key (student_id,student_name);约束名被占用


    2:alter table 表名 drop constraint 约束名;

    这个是把主键删除,可以再次添加同名主键

    例子:

    创建表:create table new_table_students (student_id number not null,student_name varchar(20) not null,student_telephone long not null);

    创建主键:alter table new_table_students add constraint new_key_students primary key (student_id,student_name);

    第一次插入数据:insert into new_table_students (student_id,student_name,student_telephone) values (1,'alice',136133);

    第二次插入数据:insert into new_table_students (student_id,student_name,student_telephone) values (1,'peter',136133); 提示主键约束

    第三次插入数据:insert into new_table_students (student_id,student_name,student_telephone) values (2,'alice',136133); 提示主键约束

    删除主键约束:alter table new_table_students drop constraint new_key_students;

    第四次插入数据:insert into new_table_students (student_id,student_name,student_telephone) values (1,'peter',136134); 插入成功

    第五次插入数据:insert into new_table_students (student_id,student_name,student_telephone) values (2,'alice',136135); 插入成功

    删除刚才两行数据:delete from new_table_students where student_telephone=136134;delete from new_table_students where student_telephone=136135;

    第二次添加主键约束:alter table new_table_students add constraint new_key_students primary key (student_id,student_name);再次添加成功


    展开全文
  • 本节文章主要介绍了oracle删除主键查看主键约束及创建联合主键,示例代码如下,需要的朋友可以参考下
  • oracle10g中删除主键约束后,在插入重复数据时候仍然报“ORA-00001”错误。 二、原因 Oracle在的10g版本中对内部函数"atbdui"进行了调整,导致在删除约束的时候无法删除用户创建的索引。这个现象被Oracle分类到...

    一、现象

    在oracle10g中删除主键约束后,在插入重复数据时候仍然报“ORA-00001”错误。

    二、原因

    Oracle在的10g版本中对内部函数"atbdui"进行了调整,导致在删除约束的时候无法删除用户创建的索引。
    这个现象被Oracle分类到了“PROBLEM”。

     

    三、方法

    在删除约束的时候需要显示的指定“drop index”选项来完成索引的级链删除。

    例:alter table table_name drop constraint constraint_name cascade drop index;

    转载于:https://www.cnblogs.com/littleCode/p/3875847.html

    展开全文
  • oracle主键约束的添加和删除

    千次阅读 2008-10-05 09:55:00
    oracle主键约束添加删除 1、创建表的同时创建主键约束 一、无命名 create table accounts ( accounts_number number primary key, accounts_balance number ); 二、有命名 create table accounts ( accounts_...
    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)
    );
    2、删除表中已有的主键约束
    一、无命名
    SELECT * FROM USER_CONS_COLUMNS WHERE TALBE_NAME=’accounts’;
    找出主键名
    ALTER TABLE ACCOUNTS DROP CONSTRAINT SYS_C003063;
    二、有命名
    ALTER TABLE ACCOUNTS DROP CONTRAINT yy;

    3、向表中添加主键约束
    ALTER TABLE ACCOUNTS ADD CONSTRAINT PK_ACCOUNTS PRIMARY KEY(ACCOUNTS_NUMBER);

    本文转自
    http://hi.baidu.com/%CD%F5%D0%F1%B4%BA/blog/item/1b32f8459835ed3a87947390.html
    展开全文
  • Oracle修改主键约束  项目需求,有张表,原有三个联合主键,现在需要再加一个字段进去,而恰恰这个字段可以为空的。去数据库捞了一把,还好数据都不为空: SQL> select count(*) from t_wlf_record t where t...
  • 问题再现问题描述在oracle数据库中明明主键已经删除了,但是插入数据的时候还是报错违反唯一约束解决方案引起该现象的原因是因为当先创建唯一约束后再创建主键约束的情况下,如果使用普通方法删除主键约束后,唯一...
  • oracle主键约束添加删除

    千次阅读 2010-02-20 00:14:00
    1、创建表的同时创建主键约束 一、无命名 create table accounts ( accounts_number number primary key, accounts_balance number ); 二、有命名 create table accounts ( accounts_number number primary...
  • 原文地址:Oracle-主键约束、唯一约束与外键约束 作者:舒风星 1.主键约束: 一个表只能有一个主键约束。主键可以是单个字段,也可以是多个字段。无论是哪种情况,其所有字段都是NOT NULL。 2.Unique约束:一...
  • 假设现在需要在联合主键中增加一个字段SO_COMPANY_CDE,刚开始的做法是删除主键约束,再重新创建联合主键 alter table CBS_AG_CNTR_MTHD drop CONSTRAINT PK_CBS_AG_CNTR_MTHD cascade; --确认约束和索引的删除...
  • Oracle修改主键约束

    2018-10-09 15:31:00
    项目需求,有张表,原有三个联合主键,现在需要再加一个字段进去,而恰恰这个字段可以为空的。去数据库捞了一把,还好数据都不为空: SQL> select count(*) from t_wlf_record t where t.acceptinvitetime is ...
  • oracle 删除主键

    2021-08-13 09:40:52
    删除主键一定要一起把索引删除 切记 alter table x drop constraint PK_x cascade drop index; alter table x add constraint PK_x primary key (GRPCONTNO, PROPOSALNO) using index ; 删除约束 同时删除索引...
  • [img]... 当先创建唯一约束后再创建主键约束的情况下,如果使用普通方法删除主键约束后,唯一约束索引不会被删除,这是Oracle 10g的一个PROBLEM。 本文通过一个实验给大家演示一下这个问题的...
  • 主键约束: 一个表只能有一个主键约束。主键可以是单个字段,也可以是多个字段。无论是哪种情况,其所有字段都是NOT NULL。 2.Unique约束:一个表可以有多个Unique约束,Unique的字段可以为NULL。 3.主键与Unique...
  • 首先查看需要修改的表的主键名 ...删除主键约束 alter table 表名 drop constraint 主键名;(通过上一步查找出来的) 添加主键约束 alter table 表名 add constraint 主键名 primary key(字段名) ...
  • Oracle主键约束

    千次阅读 2017-11-22 11:39:28
    主键约束可以由多个字段构成,这种情况被称为联合主键或复合主键   三 主键约束 1、在创建表时设置主键约束 CREATE TABLE tabl_name( column_name datatype PRIMARY_KEY,... ) SQL> create table
  • Oracle主键约束的创建,添加和删除

    千次阅读 2014-07-04 18:10:58
    Oracle主键约束的创建,添加和删除  2010-06-27 10:40:16| 分类:learning | 标签:|字号大中小 订阅 oracle主键约束添加删除 1、创建表的同时创建主键约束 一、无命名 create table accounts ( ...
  • Oracle 10g删除唯一约束键时,需要手动删除该唯一约束的唯一索引,其实唯一键就是通过唯一索引来实现的。 alter table t drop constraint constraint_name cascade [b]drop index[/b]; 如果不加上[b]drop ...
  • ORACLE中,可以在创建主键约束的时候自动创建唯一索引,也可以先创建唯一索引,然后再基于这个唯一索引来创建主键约束。后一种方式有一个好处,在 需要对数据量比较大而且读写频繁的OLTP表创建主键约束的时候,...
  • Oracle主键约束的创建与删除1、创建表的同时创建主键约束1.1、无命名create table accounts (accounts_number number primary key,accounts_balance number);1.2、有命名 create table accounts (accounts_number ...
  • Oracle 删除主键

    千次阅读 2014-08-25 23:12:11
    1、创建表的同时创建主键约束(1)无命名CREATE TABLE STUDENT(STUDENT_ID INT PRIMARY KEY NOT NULL,STUDENT_NAME VARCHAR2(8),AGE INT);(2)有命名CREATE TABLE STUDENT ( STUDENT_ID INT , STUDE...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 35,313
精华内容 14,125
关键字:

oracle删除主键约束