oracle的约束隐式创建索引和先索引后约束的区别
oracle的约束隐式创建索引和先索引后约束的区别
两种情况:
1.对于创建约束时隐式创建的索引,在做删除操作的时候: 9i~11g都会连带删除该索引
2.对于先创建索引,再创建约束(使用到此索引)这种情况:
9i版本:需要区分索引是否唯一:
如果索引是唯一的,则删除约束的时候,会连带删除索引;如果非唯一的,则不会删除索引。
10g以后版本,包括11g:无论索引是否唯一,都只是删除约束,索引不会删除。
参考metalink文档:309821.1
实验验证下
$ ss
SQL*Plus: Release 11.2.0.3.0 Production on Wed Apr 1 18:29:31 2015
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 889389056 bytes
Fixed Size 2233480 bytes
Variable Size 830475128 bytes
Database Buffers 50331648 bytes
Redo Buffers 6348800 bytes
Database mounted.
Database opened.
SQL>
SQL>
SQL>
SQL> conn hr/hr
Connected.
先创建的索引,无论是否是unique索引,都不会随约束删除而被删除
SQL> create table test(a number );
Table created.
SQL> create index ind on test ( a );
Index created.
SQL> alter table test add constraint c1_pk primary key(a) using index;
Table altered.
SQL> select index_name from user_indexes where table_name='TEST';
INDEX_NAME
------------------------------
IND
SQL> alter table test drop constraint c1_pk;
Table altered.
SQL> select index_name from user_indexes where table_name='TEST';
INDEX_NAME
------------------------------
IND
SQL> drop index IND ;
Index dropped.
SQL> create unique index ind2 on test ( a );
Index created.
SQL> alter table test add constraint c2_pk primary key(a) using index;
Table altered.
SQL> alter table test drop constraint c2_pk;
Table altered.
SQL> select index_name from user_indexes where table_name='TEST';
INDEX_NAME
------------------------------
IND2
清理一下环境,删除索引,然后直接建约束,隐式创建索引,索引会因为约束被删除,而同时被删除
SQL> drop index ind2 ;
Index dropped.
SQL>
SQL>
SQL> alter table test add constraint c2_pk primary key(a) using index;
Table altered.
SQL> select index_name from user_indexes where table_name='TEST';
INDEX_NAME
------------------------------
C2_PK
SQL> alter table test drop constraint c2_pk;
Table altered.
SQL> select index_name from user_indexes where table_name='TEST';
no rows selected
oracle的约束隐式创建索引和先索引后约束的区别的更多相关文章
- ORACLE绑定变量隐式转换导致性能问题
年后一次系统升级后,监控数据库的工具DPA发现数据库的Total Wait时间突然飙增,如下截图所示,数据库的总体等待时间对比升级前飙增了非常多 另外就是发现出现了较多的等待事件,主要有latch: ...
- oracle数据类型及其隐式转换
oracle有三种最基本的数据类型,即字符型.数值型.日期型. oracle提供的单行函数中,针对不同的数据类型,提供大量实用的函数,同时提供一系列数据类型转换函数,如下: 1)to_char ...
- Oracle异常处理内容,隐式游标
异常处理 create or replace procedure pr_test3(v_bh in varchar2,v_xx out t_hq_ryxx%rowtype) is begin sele ...
- oracle中的隐式提交(auto commit)
通常我们执行sql或pl/sql时,需要我们手工提交.这样才能使所做的更改永久保存到数据库. 但有时即使我们没有在sql或pl/sql中发出commit命令,所做的更改也会被提交.这种提交是在某些特定 ...
- 关于隐式创建vue实例实现简化弹出框组件显示步骤
我们在使用vue写alert组件的时候,经常是定义了一个alert.vue,然后引入alert.vue,然后配置参数等等,非常繁琐,那有没有一种方式可以像window.alert("内容&q ...
- SQL存储原理及聚集索引、非聚集索引、唯一索引、主键约束的关系(补)
索引类型 1. 唯一索引:唯一索引不允许两行具有相同的索引值 2. 主键索引:为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型.主键索引要求主键中的 ...
- ORACLE中内部函数SYS_OP_C2C和隐式类型转换
什么是SYS_OP_C2C呢?官方的介绍如下: SYS_OP_C2C is an internal function which does an implicit conversion of varc ...
- 关于ORACLE隐式转换后性能问题
SELECT TM.MONEY_CODE FROM T_CONTRACT_MASTER T,T_MONEY TM WHERE T.MONEY_ID = TM.MONEY_ID AND T.POLICY ...
- 从头认识java-13.9 隐式和显示的创建类型实例
对于上一章节擦除引起的问题与解决的方法有读者提出过于简单.这里解释一下:由于笔者本身也遇不到对应的问题.仅仅是凭空想像一些有可能的问题,基于水平有限,因此上一章节写的比較简单,欢迎广大读者踊跃提意见, ...
随机推荐
- RK3288 error: undefined reference to 'LOGD'
HAL层和JNI层中的打印都必须包含下面的宏和头文件. 比如:LOGD.LOGE等等. #define LOG_TAG "TEST_LED" #include <utils/ ...
- python的mp3play库试用
没有见过比这个更小型的库了,下面程序实现的功能:播放音乐,按空格键实现暂停和播放的切换. #coding=utf-8 import mp3play import pythoncom, pyHook i ...
- 推动FPGA发展箭在弦上,国内厂商须走差异化之路
7月25日,由中国电子报与深圳投资推广署共同举办的“第六届(2018)中国FPGA产业发展论坛”在深圳召开. 作为四大通用集成电路芯片之一,FPGA(现场可编程门阵列)的重要性与CPU.存储器.DSP ...
- idea maven 打包 引用本地jar
1将本地jar包导入到mvn本地库 mvn install:install-file -Dfile=/Users/liuqiang/Documents/gmpl/gmpl-server/lib/ali ...
- jq form表单自动赋值
(function ($) { $.fn.extend({ initForm: function (options) { //默认参数 var defaults = { formdata: " ...
- 【转】使用 JMeter 完成常用的压力测试
本文介绍了 JMeter 相关的基本概念.并以 JMeter 为例,介绍了使用它来完成最常用的三种类型服务器,即 Web 服务器.数据库服务器和消息中间件,压力测试的方法.步骤以及注意事项. ...
- SpringMVC之五:自定义DispatcherServlet配置及配置额外的 servlets 和 filters
相关文章 <Servlet3.0之四:动态注册和Servlet容器初始化> <SpringBoot中通过SpringBootServletInitializer如何实现组件加载> ...
- HDU 4970 Killing Monsters(树状数组)
Killing Monsters Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Other ...
- Go - coding之前的准备
Go tool 的使用 Go的tool要求我们对于code有一定的结构化组织和管理,下面我们就来一介绍他们: --GoPath environment variable: 顾名思义,环境变量,指定了 ...
- python学习 (三十一) python中的class
1 python的类: Python类都继承自object. __init__: 构造函数,如果不写,有一个默认的. __init__: 这个构造函数只能有一个,Python中不能有多个构造函数. ...