删除主键时报错ORA-00955
一。利用已有索引创建主键
1.建表
GAO@PROD> create table abcd(id number(10),name1 varchar2(20));
Table created.
2.插入数据
GAO@PROD> insert into abcd values(1,'genwang');
1 row created.
GAO@PROD> commit;
Commit complete.
3.给id字段创建索引
GAO@PROD> create index pk_abcd on abcd(id);
Index created.
4.利用已有索引创建主键
GAO@PROD> alter table abcd add constraint pk_abcd primary key(id);
Table altered.
5.查看表的索引和约束
GAO@PROD> select index_name from user_indexes where table_name=upper('abcd');
INDEX_NAME
------------------------------------------------------------------------------------------
PK_ABCD
GAO@PROD> select constraint_name from user_constraints where table_name=upper('abcd');
CONSTRAINT_NAME
------------------------------------------------------------------------------------------
PK_ABCD
6.删除主键
GAO@PROD> alter table abcd drop primary key;
Table altered.
7.查看索引和约束是否已经被删除,发现索引还在,约束没了
GAO@PROD> select index_name from user_indexes where table_name=upper('abcd');
INDEX_NAME
------------------------------------------------------------------------------------------
PK_ABCD
GAO@PROD> select constraint_name from user_constraints where table_name=upper('abcd');
no rows selected
8.用别的字段重建主键,发现报错 ORA-00955
alter table abcd add constraint pk_abcd primary key(id,name1);
GAO@PROD> alter table abcd add constraint pk_abcd primary key(id,name1);
alter table abcd add constraint pk_abcd primary key(id,name1)
*
ERROR at line 1:
ORA-00955: name is already used by an existing object
解决办法:
1)删除原来的索引,然后再创建新的主键
GAO@PROD> drop index pk_abcd;
Index dropped.
2)GAO@PROD> alter table abcd add constraint pk_abcd primary key(id,name1);
Table altered.
9.查看此时abcd表的索引和约束(可以看到如果该表主键列没有索引,这时创建主键时会自动在主键列创建索引)
GAO@PROD> select index_name,uniqueness from user_indexes where table_name=upper('abcd');
INDEX_NAME UNIQUENESS
------------------------------------------------------------------------------------------ ---------------------------
PK_ABCD UNIQUE
GAO@PROD> select constraint_name from user_constraints where table_name=upper('abcd');
CONSTRAINT_NAME
------------------------------------------------------------------------------------------
PK_ABCD
9.删除主键
GAO@PROD> alter table abcd drop primary key;
Table altered.
10.查看索引和约束状态(发现索引和约束都不复存在)
GAO@PROD> select index_name from user_indexes where table_name=upper('abcd');
no rows selected
GAO@PROD> select constraint_name from user_constraints where table_name=upper('abcd');
no rows selected
11.此时添加新的主键,不再报错
alter table abcd add constraint pk_abcd primary key(id,name1);
结论:如果主键是基于原来索引创建的,那么alter table XXX drop primary key只能删除约束,无法删除原来索引。如果此时创建主键时,主键列与索引列不同,那么就会报错ORA-00955: name is already used by an existing object。
如果主键创建时,主键列没有索引,那么创建主键时会自动在主键列创建唯一索引,这时alter table XXX drop primary key就会把约束和索引一起删除。重新创建主键时就不会报错。
删除主键时报错ORA-00955的更多相关文章
- SQL语句添加,删除主键
IF EXISTS (SELECT * FROM sys.all_objects WHERE type_desc= N'主键名')begin --删除主键 alter table 表名 drop ...
- MySQL基础之 如何删除主键
我们在一个表中设置了主键之后,那么如何删除主键呢? 删除主键的语法是: ALTER TABLE TABLE_NAME DROP PRIMARY KEY; 在这里我们要考虑两种情况: 1.可以直接使用d ...
- sql server 删除主键、外键、索引、约束的脚本
最近公司项目要升级新版本,涉及到数据库升级中各种约束.亦是整理出如下脚本方便以后查询. --删除全文索引 DECLARE c0 cursor for SELECT'DROP FULLTEXT INDE ...
- Oracle删除主键约束的同时删除索引
继续昨天的折腾(Oracle修改主键约束),删掉主键约束后,发现唯一索引并未删掉.仔细看了下,主键约束跟唯一索引名称不一样,这说明是先创建了唯一索引,后创建的主键约束.我们来试验下: SQL> ...
- 给表追加主键-----报错ORA-02437: 无法验证 (DENGCHAO.TEST) - 违反主键
由于 这次 项目 做了 数据库 迁移(从 mysql 转到oracle 用的是navicat) 的工具 所以导致很多主键都丢失了 导致数据库很多 数据的id重复 导致系统修改一条数据的时候 出现 ...
- PL/SQL 删除主键 ORA-02443: 无法删除约束条件-不存在的约束条件
在PL/SQL developer中删除一个表的主键,然后把另外一个字段设置成主键,删除的过程中报错:ORA-02443 我遇到这个问题出现的背景是: alter table saleqtya dro ...
- sql server删除主键约束所想到的
从网上找到了下面一段代码: declare @Pk varchar(100);select @Pk=Name from sysobjects where Parent_Obj=OBJECT_ID('表 ...
- mysql 增加字段脚本,以及删除主键约束的脚本,存储过程
//增加一个库下面所有表的row_id和其他9个字段的存过 DELIMITER $$ USE `erptest`$$ DROP PROCEDURE IF EXISTS `UPTABLE`$$ CREA ...
- sqlserver 2014 删除主键约束
truncate table menu SELECT * FROM sys.foreign_keys WHERE referenced_object_id=OBJECT_ID('menu'); --找 ...
随机推荐
- HelloGitHub 小程序上线了,蛋只有一个搜索功能
作者:HelloGitHub-卤蛋 我是...蛋蛋啊,本文是我从零开发「HelloGitHub 小程序」的开发日记,不要把这个系列当作技术文章来读,你将会收获更多的乐趣.♂️ 我只是个 Python ...
- C#中的partial关键字
这节讲一下partial(局部的,部分的)关键字,初学者可能没有接触过这个关键字,但是只要你写过winform或者WPF应用程序的话,那你肯定被动用过这个关键字.首先介绍一下这个关键字的作用,它用作定 ...
- Unity shader 护盾shield的简单实现
先上效果图 shader所用的贴图资源 扰动 直接对uv进行变换就可以了,记得首先把六边形格子地图的Tilling调高点 先预先调成合适大小的六边形,然后repeat铺满整个护盾 // Tiles a ...
- beta设计和计划
项目 内容 课程:北航-2020-春-软件工程 博客园班级博客 要求 Beta设计和计划 我们在这个课程的目标是 提升团队管理及合作能力,开发一项满意的工程项目 这个作业在哪个具体方面帮助我们实现目标 ...
- 如何借助CRM销售管理系统提升业绩?
与传统企业销售模式不同,现代企业在网络背书下,销售活动与网络密切相关.销售数据需要网络保存,销售渠道需要网络挖掘.在线的销售软件让销售活动起到了事半功倍的效果.CRM销售管理系统是企业必不可少的在线软 ...
- CRM系统实现自动化的“三部曲”
在了解CRM系统的自动化的时候,我们先来看一下CRM能干什么. 从上面的流程图我们就可以看出,CRM可以管理售前,售中和售后的整个客户生命周期. 为什么在复杂的客户生命周期中需要自动化呢? 当然是为了 ...
- 深入源码,深度解析Java 线程池的实现原理
java 系统的运行归根到底是程序的运行,程序的运行归根到底是代码的执行,代码的执行归根到底是虚拟机的执行,虚拟机的执行其实就是操作系统的线程在执行,并且会占用一定的系统资源,如CPU.内存.磁盘.网 ...
- [刷题] 416 Partition Equal Subset Sum
要求 非空数组的所有数字都是正整数,是否可以将这个数组的元素分成两部分,使得每部分的数字和相等 最多200个数字,每个数字最大为100 示例 [1,5,11,5],返回 true [1,2,3,5], ...
- Linux占用swap分区过高,物理内存还有剩余
Linux占用swap分区过高,物理内存还有剩余 问题分析 Swap配置对性能的影响 分配太多的Swap空间会浪费磁盘空间,而Swap空间太少,则系统会发生错误.如果系统的物理内存用光了,系统就会跑得 ...
- python3 摆放家具练习
摆放家具 需求: 1)房子有户型,总面积和家具名称列表 新房子没有任何家具 2)家具有名字和占地面积.其中: 床:占4平米 衣柜:占2平米 餐桌:占1.5平米 3)将以上三件家具添加到房子中 4)打印 ...