[20170427]唯一索引与约束注意的地方.txt

[20170427]唯一索引与约束注意的地方.txt

--//昨天看书Apress.Expert.Oracle.Indexing.and.Access.Paths.Maximum.Performance.for.Your.Database.2nd.Edition.148421983X.pdf
--//Creating Only a Unique Index P60,提到建立唯一索引与约束需要注意的地方,做一个例子说明:

1.环境:
SCOTT@book> @ &r/ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

SCOTT@book> create table t as select rownum id,'test' name from dual connect by level<=10;
Table created.

SCOTT@book> create unique index i_t_id on t(id);
Index created.

2.测试:
SCOTT@book> insert into t values (10,'aaa');
insert into t values (10,'aaa')
*
ERROR at line 1:
ORA-00001: unique constraint (SCOTT.I_T_ID) violated

--//存在冲突,注意提示,ORA-00001: unique constraint (SCOTT.I_T_ID) violated.

SCOTT@book> select constraint_name from user_constraints where constraint_name='I_T_ID';
no rows selected

--//并不存在这样的约束.

SCOTT@book> select index_name, uniqueness from user_indexes where index_name='I_T_ID';
INDEX_NAME                     UNIQUENES
------------------------------ ---------
I_T_ID                         UNIQUE

SCOTT@book> drop index i_t_id ;
Index dropped.

SCOTT@book> alter table t add constraint i_t_id unique (id) enable validate;
Table altered.

--//这两种方式最大的不同,查询sys.ind$的PROPERTY=4097.而建立唯一索引的PROPERTY=1.
SELECT *
  FROM sys.ind$
WHERE obj# IN (SELECT object_id
                  FROM dba_objects
                 WHERE owner = USER AND OBJECT_name = 'I_T_ID');

Record View
As of: 2017/4/27 8:55:34

OBJ#:         91658
DATAOBJ#:     91658
TS#:          4
FILE#:        4
BLOCK#:       554
BO#:          91655
INDMETHOD#:   0
COLS:         1
PCTFREE$:     10
INITRANS:     2
MAXTRANS:     255
PCTTHRES$:   
TYPE#:        1
FLAGS:        2050
PROPERTY:     4097
BLEVEL:       0
LEAFCNT:      1
DISTKEY:      10
LBLKKEY:      1
DBLKKEY:      1
CLUFAC:       1
ANALYZETIME:  2017/4/27 8:53:24
SAMPLESIZE:   10
ROWCNT:       10
INTCOLS:      1
DEGREE:      
INSTANCES:   
TRUNCCNT:    
SPARE1:       1
SPARE2:      
SPARE3:      
SPARE4:      
SPARE5:      
SPARE6:       2017/4/27 0:53:24

--//如果查询 /u01/app/oracle/product/11.2.0.4/dbhome_1/rdbms/admin/dcore.bsq

property      number not null,    /* immutable flags for life of the index */
                                                            /* unique : 0x01 */
                                                       /* partitioned : 0x02 */
                                                           /* reverse : 0x04 */
                                                        /* compressed : 0x08 */
                                                        /* functional : 0x10 */
                                              /* temporary table index: 0x20 */
                             /* session-specific temporary table index: 0x40 */
                                              /* index on embedded adt: 0x80 */
                         /* user said to check max length at runtime: 0x0100 */
                                              /* domain index on IOT: 0x0200 */
                                                      /* join index : 0x0400 */
                                     /* system managed domain index : 0x0800 */
                           /* The index was created by a constraint : 0x1000 */
                              /* The index was created by create MV : 0x2000 */
                                          /* composite domain index : 0x8000 */
  /* The following columns are used for index statistics such
   * as # btree levels, # btree leaf blocks, # distinct keys,
   * # distinct values of first key column, average # leaf blocks per key,
   * clustering info, and # blocks in index segment.
   */

SCOTT@book> @ &r/10to16 4097
10 to 16 HEX   REVERSE16
-------------- ------------------
0000000001001 0x01100000

--//第4位为1表示/* The index was created by a constraint : 0x1000 */.

时间: 2024-10-15 15:51:44

[20170427]唯一索引与约束注意的地方.txt的相关文章

mssql 唯一索引和约束 讲述

唯一索引和约束     唯一索引不允许重复值被插入索引也就保证了对应的行不允许被插入索引所在的表,这也是为什么唯一索引能够实现主键和候选键.     为表声明主键或唯一约束时,SQL Server会自动创建与之对应的唯一索引.你可以在没有唯一约束的情况下创建唯一索引,但反之则不行.定义一个约束时,SQL Server会自动创建一个与之同名的索引,并且你不能在删除约束之前删除索引.但可以删除约束,删除约束也会导致与之关联的索引被删除.     每个表中可以包含多个唯一索引.比如说Adventure

【译】SQL Server索引进阶第八篇:唯一索引

原文:[译]SQL Server索引进阶第八篇:唯一索引     索引设计是数据库设计中比较重要的一个环节,对数据库的性能其中至关重要的作用,但是索引的设计却又不是那么容易的事情,性能也不是那么轻易就获取到的,很多的技术人员因为不恰当的创建索引,最后使得其效果适得其反,可以说"成也索引,败也索引".     本系列文章来自Stairway to SQL Server Indexes,翻译和整理后发布在agilesharp和博客园,希望对广大的技术朋友在如何使用索引上有所帮助.   唯一

Oracle中唯一约束和唯一索引的区别

在使用TOAD来操作Oracle数据库时,会注意到创建约束时有Primary Key.Check.Unique和Foreign Key四种类型的约束,这与SQL Server中的约束没有什么区别,这里的Check约束除了用于一般的Check约束外,在Oracle中也用于非空约束的实现.也就是说如果一个字段不允许为空,则系统将会创建一个系统的Check约束,该约束定了某字段不能为空. 除了约束,还有另外一个概念是索引,在TOAD中创建索引的界面如下: 我们可以注意到在唯一性组中有三个选项:不唯一.

MySQL批量插入遇上唯一索引避免方法_Mysql

一.背景 以前使用SQL Server进行表分区的时候就碰到很多关于唯一索引的问题:Step8:SQL Server 当表分区遇上唯一约束,没想到在MySQL的分区中一样会遇到这样的问题:MySQL表分区实战. 今天我们来了解MySQL唯一索引的一些知识:包括如何创建,如何批量插入,还有一些技巧上SQL: 这些问题的根源在什么地方?有什么共同点?MySQL中也有分区对齐的概念?唯一索引是在很多系统中都会出现的要求,有什么办法可以避免?它对性能的影响有多大? 二.过程 (一) 导入差异数据,忽略重

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

unique-select distinct 多个字段,其中有些字段有联合唯一索引,那么其他字段会参与去重吗

问题描述 select distinct 多个字段,其中有些字段有联合唯一索引,那么其他字段会参与去重吗 t1表的c1,c2字段有唯一索引, create unique index indexname on t1 (c1,c2); 那么在执行这个SQL的时候: select distinct t0.c1, t1.c1, t1.c2, t1.c3, t1.c4 from t0, t1 where t0.c5 = t1.c5; 是只有t0.c1, t1.c1, t1.c2三个字段参与去重,还是5个字

MongoDB 唯一索引

MongoDB支持的索引种类很多,诸如单键索引,复合索引,多键索引,TTL索引,文本索引,空间地理索引等.同时索引的属性可以具有唯一性,即唯一索引.唯一索引用于确保索引字段不存储重复的值,即强制索引字段的唯一性.缺省情况下,MongoDB的_id字段在创建集合的时候会自动创建一个唯一索引.本文主要描述唯一索引的用法. 一.创建唯一索引语法 //语法 db.collection.createIndex( <key and index type specification>, { unique:

MySQL中的唯一索引的简单学习教程_Mysql

mysql 唯一索引UNIQUE一般用于不重复数据字段了我们经常会在数据表中的id设置为唯一索引UNIQUE,下面我来介绍如何在mysql中使用唯一索引UNIQUE吧. 创建唯一索引的目的不是为了提高访问速度,而只是为了避免数据出现重复.唯一索引可以有多个但索引列的值必须唯一,索引列的值允许有空值.如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该使用关键字UNIQUE. 把它定义为一个唯一索引. 创建表时直接设置: DROP TABLE IF EXISTS `st

mysql 普通索引 唯一索引的创建与效率比较

unique(唯一索引) alter table `table_name` add unique (`column`) index(普通索引) mysql教程>alter table `table_name` add index index_name ( `column` ) fulltext(全文索引) alter table `table_name` add fulltext ( `column` )   1.普通索引 普通索引(由关键字key或index定义的索引)的唯一任务是加快对数据的