mongodb支援的索引種類很多,諸如單鍵索引,復合索引,多鍵索引,ttl索引,文字索引,空間地理索引等。同時索引的屬性可以具有唯一性,即唯一索引。唯一索引用於確保索引欄位不儲存重複的值,即強制索引欄位的唯一性。預設情況下,mongodb的_id欄位在建立集合的時候會自動建立乙個唯一索引。本文主要描述唯一索引的用法。
//語法
db.collection.createindex( , )
> db.version()
3.2.10
演示集合資料,可以參考:
> db.persons.find().limit(1).pretty()
,"country" : "usa",
"books" : [
"js",
"c++",
"extjs",
"mongodb"]}
> db.persons.createindex(,)
> db.persons.getindexes()[,
"name" : "name_1",
"ns" : "test.persons"}]
> db.persons.createindex(,)
> db.persons.getindexes()[,
"name" : "name_1_email_1",
"ns" : "test.persons"}]
對於那些已經存在非唯一的列,在其上面建立唯一索引將失敗
不能夠基於乙個雜湊索引指定唯一性
unique constraint across separate documents
唯一的約束適用於集合中的單獨的文件。也就是說,唯一的索引可以防止不同的文件具有相同的索引鍵值,
但索引並不能阻止在基於陣列或者內嵌文件建立的唯一索引上具有多個相同的值。
在乙個具有重複值的單個文件的情況下,重複的值僅插入到該索引一次。
假定存在以下集合
> db.collection.insert( , ] } )
writeresult()
> db.collection.find()
, ] }
在集合上a.b上建立乙個唯一索引
> db.collection.createindex( , )
如果集合中沒有文件上存在a.b為5的值,則唯一索引允許以下文件插入集合
> db.collection.insert( , ] } )
writeresult()
> db.collection.insert( , ] } ) //再次插入則提示錯誤
writeresult("}})
> db.collection.insert( ] } ) //再次插入則提示錯誤,即使是該文件僅有乙個相同的陣列元素
writeresult("}})
> db.collection.insert( ] } )
writeresult()
unique index and missing field
如果乙個文件在乙個唯一索引中沒有索引欄位的值,則該索引將為該文件儲存乙個空值。
由於唯一約束限制,mongodb只會允許乙個文件缺少索引字段。
對多於乙個以上的文件沒有索引欄位的值或缺少索引字段,索引構建將失敗,提示重複鍵錯誤。
假定存在如下集合
> db.mycol.insert()
writeresult()
//為集合新增唯一索引
> db.mycol.createindex( , )
//再次插入x:1,如下,我們收到了錯誤提示
> db.mycol.insert()
writeresult("}})
//向集合插入文件x:2,y:2
> db.mycol.insert()
writeresult()
//插入乙個缺少x鍵的新文件,如下,可以成功插入
> db.mycol.insert()
writeresult()
//再次插入乙個缺少x鍵的新文件,提示重複
> db.mycol.insert()
writeresult("}})
mongodb 單鍵(列)索引
mongodb 復合索引
mongodb 多鍵索引
mongodb執行計畫獲取(db.collection.explain())
mysql 唯一索引 mysql建立唯一索引
檢視索引 show index from 資料庫表名 alter table 資料庫add index 索引名稱 資料庫欄位名稱 primary key 主鍵索引 alter table table name add primary key column unique 唯一索引 alter tabl...
MySQL唯一索引
mysql唯一索引 返回首頁 1 唯一索引 unique 單列唯一索引和聯合唯一索引。索引是為了加速查詢。唯一索引是加了約束條件。例如主外來鍵。2 唯一索引的約束 約束不能重複 可以為空 主鍵不能重複 不能為空 3 唯一索引的寫法 create table t1 id int num int,uni...
mysql索引二(唯一索引)
前文中介紹了mysql中普通索引用法,和沒有索引的區別。mysql索引一 普通索引 下面學習一下唯一索引。建立唯一索引的目的不是為了提高訪問速度,而只是為了避免資料出現重複。唯一索引可以有多個但索引列的值必須唯一,索引列的值允許有空值。如果能確定某個資料列將只包含彼此各不相同的值,在為這個資料列建立...