精华内容
参与话题
问答
  • MongoDB 唯一索引

    万次阅读 2016-12-22 17:02:58
    同时索引的属性可以具有唯一性,即唯一索引。唯一索引用于确保索引字段不存储重复的值,即强制索引字段的唯一性。缺省情况下,MongoDB的_id字段在创建集合的时候会自动创建一个唯一索引。本文主要描述唯一索引的用法...

    MongoDB支持的索引种类很多,诸如单键索引,复合索引,多键索引,TTL索引,文本索引,空间地理索引等。同时索引的属性可以具有唯一性,即唯一索引。唯一索引用于确保索引字段不存储重复的值,即强制索引字段的唯一性。缺省情况下,MongoDB的_id字段在创建集合的时候会自动创建一个唯一索引。本文主要描述唯一索引的用法。

    一、创建唯一索引语法

        //语法
        db.collection.createIndex( <key and index type specification>, { unique: true } )
    
        语法更多描述可参考:http://blog.csdn.net/leshami/article/details/53541978
    

    二、演示创建唯一索引

    1、演示环境

        > db.version()
        3.2.10
    
        演示集合数据,可以参考:http://blog.csdn.net/leshami/article/details/52672310
    
        > db.persons.find().limit(1).pretty()
        {
                "_id" : ObjectId("5812cbaaa129eed14b46458d"),
                "name" : "robinson.cheng",
                "age" : 25,
                "email" : "robinson.cheng@qq.com",
                "score" : {
                        "c" : 89,
                        "m" : 96,
                        "e" : 87
                },
                "country" : "USA",
                "books" : [
                        "JS",
                        "C++",
                        "EXTJS",
                        "MONGODB"
                ]
        }
    

    2、单个键(列)上的唯一索引

        > db.persons.createIndex({name:1},{unique:true})
        {
                "createdCollectionAutomatically" : false,
                "numIndexesBefore" : 1,
                "numIndexesAfter" : 2,
                "ok" : 1
        }
        > db.persons.getIndexes()
        [
                {
                        "v" : 1,
                        "unique" : true,    //此处表示这个索引为唯一索引
                        "key" : {
                                "name" : 1
                        },
                        "name" : "name_1",
                        "ns" : "test.persons"
                }
        ]
    

    3、基于复合键(列)的唯一索引

        > db.persons.createIndex({name:1,email:1},{unique:true})
        {
                "createdCollectionAutomatically" : false,
                "numIndexesBefore" : 2,
                "numIndexesAfter" : 3,
                "ok" : 1
        }
        > db.persons.getIndexes()
        [
                 {
                        "v" : 1,
                        "unique" : true,  //此处表示这个索引为唯一索引
                        "key" : {
                                "name" : 1,  //这个是索引对应的键,包括name和email
                                "email" : 1
                        },
                        "name" : "name_1_email_1",
                        "ns" : "test.persons"
                }
        ]
    

    4、创建唯一索引的一些限制

        对于那些已经存在非唯一的列,在其上面创建唯一索引将失败
        不能够基于一个哈希索引指定唯一性
    
        Unique Constraint Across Separate Documents
    
        唯一的约束适用于集合中的单独的文档。也就是说,唯一的索引可以防止不同的文档具有相同的索引键值,
        但索引并不能阻止在基于数组或者内嵌文档创建的唯一索引上具有多个相同的值。
        在一个具有重复值的单个文档的情况下,重复的值仅插入到该索引一次。
    
        假定存在以下集合
        > db.collection.insert( { a: [ { b: 4 }, { b: 4 } ] } )
        WriteResult({ "nInserted" : 1 })
    
        > db.collection.find()
        { "_id" : ObjectId("58199898ae431a4615ec75ac"), "a" : [ { "b" : 4 }, { "b" : 4 } ] }
    
        在集合上a.b上创建一个唯一索引
        > db.collection.createIndex( { "a.b": 1 }, { unique: true } )
        {
                "createdCollectionAutomatically" : false,
                "numIndexesBefore" : 1,
                "numIndexesAfter" : 2,
                "ok" : 1
        }
    
        如果集合中没有文档上存在a.b为5的值,则唯一索引允许以下文档插入集合
        > db.collection.insert( { a: [ { b: 5 }, { b: 5 } ] } )
        WriteResult({ "nInserted" : 1 })
        > db.collection.insert( { a: [ { b: 5 }, { b: 5 } ] } )   //再次插入则提示错误
        WriteResult({
                "nInserted" : 0,
                "writeError" : {
                        "code" : 11000,
                        "errmsg" : "E11000 duplicate key error collection: test.collection index: a.b_1 dup key: { : 5.0 }"
                }
        })
    
        > db.collection.insert( { a: [ { b: 5 }] } )  //再次插入则提示错误,即使是该文档仅有一个相同的数组元素
        WriteResult({
                "nInserted" : 0,
                "writeError" : {
                        "code" : 11000,
                        "errmsg" : "E11000 duplicate key error collection: test.collection index: a.b_1 dup key: { : 5.0 }"
                }
        })
        > db.collection.insert( { a: [ { b: 6 }] } )
        WriteResult({ "nInserted" : 1 })
    
        Unique Index and Missing Field
    
        如果一个文档在一个唯一索引中没有索引字段的值,则该索引将为该文档存储一个空值。
        由于唯一约束限制,MongoDB只会允许一个文档缺少索引字段。
        对多于一个以上的文档没有索引字段的值或缺少索引字段,索引构建将失败,提示重复键错误。
    
        假定存在如下集合
        > db.mycol.insert({x:1})
        WriteResult({ "nInserted" : 1 })
    
        //为集合添加唯一索引
        > db.mycol.createIndex( { "x": 1 }, { unique: true } )
        {
                "createdCollectionAutomatically" : false,
                "numIndexesBefore" : 1,
                "numIndexesAfter" : 2,
                "ok" : 1
        }
    
        //再次插入x:1,如下,我们收到了错误提示
        > db.mycol.insert({x:1})
        WriteResult({
                "nInserted" : 0,
                "writeError" : {
                        "code" : 11000,
                        "errmsg" : "E11000 duplicate key error collection: test.mycol index: x_1 dup key: { : 1.0 }"
                }
        })
    
        //向集合插入文档x:2,y:2
        > db.mycol.insert({x:2,y:2})
        WriteResult({ "nInserted" : 1 })
    
        //插入一个缺少x键的新文档,如下,可以成功插入
        > db.mycol.insert({y:2})
        WriteResult({ "nInserted" : 1 })
    
        //再次插入一个缺少x键的新文档,提示重复
        > db.mycol.insert({z:1})
        WriteResult({
                "nInserted" : 0,
                "writeError" : {
                        "code" : 11000,
                        "errmsg" : "E11000 duplicate key error collection: test.mycol index: x_1 dup key: { : null }"
                }
        })
    

    三、更多参考

    MongoDB 单键(列)索引
    MongoDB 复合索引
    MongoDB 多键索引
    MongoDB执行计划获取(db.collection.explain())

    DBA牛鹏社(SQL/NOSQL/LINUX)

    展开全文
  • 唯一约束和唯一索引区别

    千次阅读 2017-09-21 21:02:55
    1.主键约束(PRIMARY KEY) 1) 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键。 2) 是不可能(或很难)...1) 唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段
    1.主键约束(PRIMARY KEY)
    1. 1) 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键
    2. 2) 是不可能(或很难)更新.
    3. 3) 主键列上没有任何两行具有相同值(即重复值),不允许空(NULL).
    4. 4) 主健可作外健,唯一索引不可;

    2.唯一性约束(UNIQUE)
    1. 1) 唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段,
    2. 一个表上可以放置多个唯一性约束.
    3. 2) 只要唯一就可以更新.
    4. 3) 即表中任意两行在 指定列上都不允许有相同的值,允许空(NULL).
    5. 4) 一个表上可以放置多个唯一性约束

    3.唯一索引(INDEX)
    1. 创建唯一索引可以确保任何生成重复键值的尝试都会失败。
    2. 唯一性约束和主键约束的区别:
    3. (1).唯一性约束允许在该列上存在NULL值,而主键约束的限制更为严格,
    4. 不但不允许有重复,而且也不允许有空值
    5. (2).在创建唯一性约束和主键约束时可以创建聚集索引和非聚集索引,
    6. 但在默认情况下主键约束产生聚集索引,而唯一性约束产生非聚集索引

       约束和索引, 前者是用来检查数据的正确性,后者用来实现数据查询的优化,目的不同。
       唯一性约束与唯一索引有所不同:
    1. (1).创建唯一约束会在Oracle中创建一个Constraint,同时也会创建一个该约束对应的唯一索引。
    2. (2).创建唯一索引只会创建一个唯一索引,不会创建Constraint。
    3. 也就是说其实唯一约束是通过创建唯一索引来实现的。
    1. 1. 建表时加上唯一性约束
      1. CREATE TABLE `t_user` (
      2. `Id` int(11) NOT NULL AUTO_INCREMENT, -- 自增
      3. `username` varchar(18) NOT NULL unique, -- 唯一性约束
      4. `password` varchar(18) NOT NULL,
      5. PRIMARY KEY (`Id`)
      6. ) ENGINE=InnoDB AUTO_INCREMENT=1018 DEFAULT CHARSET=utf8;

    2. 2.给已经建好的表加上唯一性约束
      1. ALTER TABLE `t_user` ADD unique(`username`);


     在删除时这两者也有一定的区别:
    1. 删除唯一约束时可以只删除约束而不删除对应的索引,所以对应的列还是必须唯一的,
    2. 而删除了唯一索引的话就可以插入不唯一的值。
    1. 索引是使用 create/drop index 创建和删除的
    2. 而约束是使用 alter table tb add constraint 建立, 使用 drop constraint 删除



    展开全文
  • 分布式唯一ID极简教程

    千次阅读 2017-11-25 09:00:11
    分布式唯一ID极简教程   一,题记 所有的业务系统,都有生成ID的需求,如订单id,商品id,文章ID等。这个ID会是数据库中的唯一主键,在它上面会建立聚集索引! 阅读本文,建议大家已经掌握了扎实的互联网技术,...

    原文地址 : http://yangactive.iteye.com/blog/2400727


    一,题记

    所有的业务系统,都有生成ID的需求,如订单id,商品id,文章ID等。这个ID会是数据库中的唯一主键,在它上面会建立聚集索引!

    阅读本文,建议大家已经掌握了扎实的互联网技术,可参考:互联网技术清单

    ID生成的核心需求有两点:

    全局唯一

    趋势有序

    二,为什么要全局唯一?

    著名的例子就是身份证号码,身份证号码确实是对人唯一的,然而一个人是可以办理多个身份证的,例如你身份证丢了,又重新补办了一张,号码不变。

    问题来了,因为系统是按照身份证号码做唯一主键的。此时,如果身份证是被盗的情况下,你是没有办法在系统里面注销的,因为新旧2个身份证的“主键”都是身份证号码。

    也就是说,旧的身份证仍然逍遥在外,完全有效。这个时候,还好有一个身份证有效时间的东西,只有靠身份证有效期来辨识了。不过,这就是现在这么多银行,电信事件的由来,捡到一张身份证,去很多银行,手机,酒店都可以使用!身份证缺乏注销机制!

    所以,经验告诉我们。不要相信自己的直觉,业务上所谓的唯一往往都是不靠谱的,经不起时间的考研的。所以需要单独设置一个和业务无关的主键,专业术语叫做代理主键(surrogate key)。

    这也是为什么数据库设计范式,唯一主键是第一范式!

    三,为什么要趋势有序

    以mysql为例,InnoDB引擎表是基于B+树的索引组织表(IOT);每个表都需要有一个聚集索引(clustered index);所有的行记录都存储在B+树的叶子节点(leaf pages of the tree);基于聚集索引的增、删、改、查的效率相对是最高的;如下图:


     

    如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择其作为聚集索引;

    如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引;

    如果也没有这样的唯一索引,则InnoDB会选择内置6字节长的ROWID作为隐含的聚集索引(ROWID随着行记录的写入而主键递增,这个ROWID不像ORACLE的ROWID那样可引用,是隐含的)。

    综上总结,如果InnoDB表的数据写入顺序能和B+树索引的叶子节点顺序一致的话,这时候存取效率是最高的,也就是下面这几种情况的存取效率最高

    使用自增列(INT/BIGINT类型)做主键,这时候写入顺序是自增的,和B+数叶子节点分裂顺序一致;

    该表不指定自增列做主键,同时也没有可以被选为主键的唯一索引(上面的条件),这时候InnoDB会选择内置的ROWID作为主键,写入顺序和ROWID增长顺序一致;

    除此以外,如果一个InnoDB表又没有显示主键,又有可以被选择为主键的唯一索引,但该唯一索引可能不是递增关系时(例如字符串、UUID、多字段联合唯一索引的情况),该表的存取效率就会比较差。)

    这就是为什么我们的分布式ID一定要是趋势递增的!那么在开发当中,面对这种分布式ID需求,常见的处理方案有哪些呢?


     

    四,数据库自增长序列或字段

    最常见的方式。利用数据库,全数据库唯一。

    优点:

    1)简单,代码方便,性能可以接受。

    2)数字ID天然排序,对分页或者需要排序的结果很有帮助。

    缺点:

    1)不同数据库语法和实现不同,数据库迁移的时候或多数据库版本支持的时候需要处理。

    2)在单个数据库或读写分离或一主多从的情况下,只有一个主库可以生成。有单点故障的风险。

    3)在性能达不到要求的情况下,比较难于扩展。

    4)如果遇见多个系统需要合并或者涉及到数据迁移会相当痛苦。

    5)分表分库的时候会有麻烦。

    优化方案:

    1)针对主库单点,如果有多个Master库,则每个Master库设置的起始数字不一样,步长一样,可以是Master的个数。比如:Master1 生成的是 1,4,7,10,Master2生成的是2,5,8,11 Master3生成的是 3,6,9,12。这样就可以有效生成集群中的唯一ID,也可以大大降低ID生成数据库操作的负载。

    五,UUID

    常见的方式。可以利用数据库也可以利用程序生成,一般来说全球唯一。

    优点:

    1)简单,代码方便。

    2)生成ID性能非常好,基本不会有性能问题。

    3)全球唯一,在遇见数据迁移,系统数据合并,或者数据库变更等情况下,可以从容应对。

    缺点:

    1)没有排序,无法保证趋势递增。

    2)UUID往往是使用字符串存储,查询的效率比较低。

    3)存储空间比较大,如果是海量数据库,就需要考虑存储量的问题。

    4)传输数据量大

    5)不可读。

    六,Redis生成ID

    当使用数据库来生成ID性能不够要求的时候,我们可以尝试使用Redis来生成ID。这主要依赖于Redis是单线程的,所以也可以用生成全局唯一的ID。可以用Redis的原子操作 INCR和INCRBY来实现。

    可以使用Redis集群来获取更高的吞吐量。假如一个集群中有5台Redis。可以初始化每台Redis的值分别是1,2,3,4,5,然后步长都是5。各个Redis生成的ID为:

    A:1,6,11,16,21

    B:2,7,12,17,22

    C:3,8,13,18,23

    D:4,9,14,19,24

    E:5,10,15,20,25

    这个,随便负载到哪个机确定好,未来很难做修改。但是3-5台服务器基本能够满足器上,都可以获得不同的ID。但是步长和初始值一定需要事先需要了。使用Redis集群也可以方式单点故障的问题。

    另外,比较适合使用Redis来生成每天从0开始的流水号。比如订单号=日期+当日自增长号。可以每天在Redis中生成一个Key,使用INCR进行累加。

    优点:

    1)不依赖于数据库,灵活方便,且性能优于数据库。

    2)数字ID天然排序,对分页或者需要排序的结果很有帮助。

    缺点:

    1)如果系统中没有Redis,还需要引入新的组件,增加系统复杂度。

    2)需要编码和配置的工作量比较大。

    七,twitter

    twitter在把存储系统从MySQL迁移到Cassandra的过程中由于Cassandra没有顺序ID生成机制,于是自己开发了一套全局唯一ID生成服务:Snowflake。

    1 41位的时间序列(精确到毫秒,41位的长度可以使用69年)

    2 10位的机器标识(10位的长度最多支持部署1024个节点)

    3 12位的计数顺序号(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号) 最高位是符号位,始终为0。

    优点:

    高性能,低延迟;独立的应用;

    按时间有序。

    缺点:

    需要独立的开发和部署。

    强依赖时钟,如果主机时间回拨,则会造成重复ID,会产生

    ID虽然有序,但是不连续

    原理


     

    八,MongoDB的ObjectId

    MongoDB的ObjectId和snowflake算法类似。它设计成轻量型的,不同的机器都能用全局唯一的同种方法方便地生成它。MongoDB 从一开始就设计用来作为分布式数据库,处理多个节点是一个核心要求。使其在分片环境中要容易生成得多。

    ObjectId使用12字节的存储空间,其生成方式如下:

    |0|1|2|3|4|5|6 |7|8|9|10|11|

    |时间戳 |机器ID|PID|计数器 |

    前四个字节时间戳是从标准纪元开始的时间戳,单位为秒,有如下特性:

    1 时间戳与后边5个字节一块,保证秒级别的唯一性;

    2 保证插入顺序大致按时间排序;

    3 隐含了文档创建时间;

    4 时间戳的实际值并不重要,不需要对服务器之间的时间进行同步(因为加上机器ID和进程ID已保证此值唯一,唯一性是ObjectId的最终诉求)。

    机器ID是服务器主机标识,通常是机器主机名的散列值。

    同一台机器上可以运行多个mongod实例,因此也需要加入进程标识符PID。

    前9个字节保证了同一秒钟不同机器不同进程产生的ObjectId的唯一性。后三个字节是一个自动增加的计数器(一个mongod进程需要一个全局的计数器),保证同一秒的ObjectId是唯一的。同一秒钟最多允许每个进程拥有(256^3 = 16777216)个不同的ObjectId。

    总结一下:时间戳保证秒级唯一,机器ID保证设计时考虑分布式,避免时钟同步,PID保证同一台服务器运行多个mongod实例时的唯一性,最后的计数器保证同一秒内的唯一性(选用几个字节既要考虑存储的经济性,也要考虑并发性能的上限)。

    "_id"既可以在服务器端生成也可以在客户端生成,在客户端生成可以降低服务器端的压力。

    九,类snowflake算法

    国内有很多厂家基于snowflake算法进行了国产化,例如

    百度的uid-generator:

    https://github.com/baidu/uid-generator

    美团Leaf:

    https://github.com/zhuzhong/idleaf

    基本是对snowflake的进一步优化,比如解决时钟 回拨问题!

    十,总结

    总体而言,分布式唯一ID需要满足以下条件:

    高可用性:不能有单点故障。

    全局唯一性:不能出现重复的ID号,既然是唯一标识,这是最基本的要求。

    趋势递增:在MySQL InnoDB引擎中使用的是聚集索引,由于多数RDBMS使用B-tree的数据结构来存储索引数据,在主键的选择上面我们应该尽量使用有序的主键保证写入性能。

    时间有序:以时间为序,或者ID里包含时间。这样一是可以少一个索引,二是冷热数据容易分离。

    分片支持:可以控制ShardingId。比如某一个用户的文章要放在同一个分片内,这样查询效率高,修改也容易。

    单调递增:保证下一个ID一定大于上一个ID,例如事务版本号、IM增量消息、排序等特殊需求。

    长度适中:不要太长,最好64bit。使用long比较好操作,如果是96bit,那就要各种移位相当的不方便,还有可能有些组件不能支持这么大的ID。

    信息安全:如果ID是连续的,恶意用户的扒取工作就非常容易做了,直接按照顺序下载指定URL即可;如果是订单号就更危险了,竞争对手可以直接知道我们一天的单量。所以在一些应用场景下,会需要ID无规则、不规则。

    欢迎加作者微信:geekmainland 来撩技术!


    展开全文
  • 唯一

    2006-09-01 14:18:00
    我的天空多么的清晰透明的承诺是过去的空气牵着我的手是你但你的笑容却看不清是否一颗星星变了心从前的愿望也全都被抛弃最近我无法...唯一独自对着电话说我爱你我真的爱你BABY我已不能多爱你一些其实早已超过爱的界线...
    我的天空多么的清晰
    透明的承诺
    是过去的空气
    牵着我的手是你
    但你的笑容却看不清
    是否一颗星星变了心
    从前的愿望也全都被抛弃
    最近我无法呼吸
    连自己的影子都想逃避(逃避)
    BABY你就是我的唯一
    两个世界都变心
    回去谈何容易
    确定你就是我的唯一
    独自对着电话说我爱你
    我真的爱你BABY
    我已不能多爱你一些
    其实早已超过爱的界线
    展开全文
  • 全网唯一--等保管理制度体系,信息安全管理制度--医院 信息系统安全等级保护建设制度体系建设,三级等保、等保三级制度,网络安全管理制度--约70个安全管理制度!
  • 之前有做过防止用户非法使用公司软件的组件(软件授权),其中基于windows系统获取设备唯一标志,上任开发者获取的唯一标识之一CPU ID已经不再唯一产生的Bug,便是参考此文修复。现记录之。     原文地址:...
  • 一、MYSQL索引的分类 索引用于快速查找具有特定列值的行。如果没有索引,MySQL必须从第一行开始,然后读取整个表以查找...MYSQL的索引主要分为主键索引(PRIMARY KEY),唯一索引(UNIQUE),普通索引(INDEX)和全文索...
  • mysql创建唯一索引

    万次阅读 2019-06-14 11:45:56
    查看索引 show index from 数据库表名 alter table 数据库add index 索引名称(数据库字段名称) PRIMARY KEY(主键索引) ...UNIQUE(唯一索引) ALTER TABLE `table_name` ADD UNIQUE (`column`) I...
  • 别踩坑!使用MySQL唯一索引请注意

    万次阅读 多人点赞 2019-01-28 21:33:14
    背景 在程序设计中了,我们往往需要...但是我们不能确保同时有两个人使用同一个手机号注册到我们的系统中,因此这里就需要在更深的层次去确保手机号的唯一性了。不同存储方案,解决方式不一样,这里以MySQL为例,我...
  • 谈谈唯一约束和唯一索引

    万次阅读 多人点赞 2018-03-27 21:20:00
    最近在看数据库相关知识,感觉唯一约束和唯一索引好像有点类似,于是研究了一番,于是就有了这篇文章。 概念 开始之前,先解释一下约束和索引。 约束 全称完整性约束,它是关系数据库中的对象,用来存放插入到...
  • 普通索引与唯一索引

    万次阅读 2019-04-08 20:20:06
    所谓唯一索引,就是在创建索引时,限制索引的值必须是唯一的。通过该类型的索引可以更快速地查询某条记录。 普通索引还是唯一索引? 假设你在维护一个市民系统,每个人都有一个唯一的身份证号,而且业务代码已经...
  • 唯一索引和非唯一索引

    千次阅读 2016-11-13 00:09:47
    从Oracle索引的特征上,我们可以简单的把索引分为Unique Indexes and Nonunique Indexes,即唯一索引和非唯一索引。 1 对于唯一索引唯一索引确保被索引的字段或多个联合字段在表中绝对不会有重复值;通常,我们在...
  • SQL Server创建索引时,可以指定Unique使之成为唯一索引。“唯一”顾名思义,但是两都到底有什么区别呢?因为索引也是一种物理结构,所以还是要从存储和结构上分析。 索引结构分叶级和非叶级,分析时我们要分开来...
  • MySQL之添加联合唯一索引

    万次阅读 2018-03-26 15:38:50
    一、联合唯一索引 项目中需要用到联合唯一索引: 例如:有以下需求:每个人每一天只有可能产生一条记录:处了程序约定之外,数据库本身也可以设定: 例如:t_aa 表中有aa,bb两个字段,如果不希望有2条一模一样的记录(即...
  • Oracle主键、唯一键与唯一索引的区别   一般,我们看到术语“索引”和“键”交换使用,但实际上这两个是不同的。索引是存储在数据库中的一个物理结构,键纯粹是一个逻辑概念。键代表创建来实施业务规则的完整性...
  • 唯一索引or普通索引?阿里强制唯一索引? 1、 唯一索引和普通索引区别 先谈谈两者在查询操作上的区别,假设我们对一张User表建立mobile字段的索引。 1. 查询操作 若执行查询语句select * from user where mobile=...
  • CREATE TABLE IF NOT EXISTS `ppserver`.`eventTable`( `userId` INT UNSIGNED NOT null, `taskId` INT UNSIGNED NOT null, `date` TIMESTAMP DEFAULT CURREN
  • oracle 唯一约束 和 唯一索引

    千次阅读 2016-07-18 11:43:21
    唯一约束 和 唯一索引
  • 唯一索引可确保索引字段不存储重复值,即强制索引字段的唯一性。默认情况下,MongoDB在创建集合期间会在_id字段上创建唯一索引
  • 普通索引 这是最基本的索引类型,而且它没有唯一性之类的限制。 唯一性索引 这种索引和前面的“普通索引”基本相同,...对于唯一索引来说,由于索引定义了唯一性,查找到第一个满足条件的记录后,就会停止继续检索...
  • SQLServer索引管理——唯一索引和唯一约束的区别 唯一索引保证在索引键列中的值是唯一的 唯一约束保证没有重复值被插入到列中,当该列上创建有唯一约束的时候。当列上创建了唯一约束时,对应的会在该列自动创建...
  • 唯一索引

    2009-10-02 15:03:00
    一种索引,不允许具有索引值相同的行,从而禁止重复的索引或键值。系统在创建该索引时检查是否有重复的键值,并在每次使用 INSERT 或 UPDATE 语句添加数据时进行检查。
  • Mysql唯一索引 唯一约束

    万次阅读 2017-09-28 23:37:42
    Mysql唯一索引 唯一约束唯一索引作为mysql众多索引常用的一种,再一次业务中了解到此索引特在此记载Mysql唯一索引 唯一约束 唯一索引的的作用 唯一索引与唯一约束的区别 添加删除唯一索引的sql语句 需要注意的坑唯一...
  • MongoDB 提供了多样性的索引支持,索引信息被保存在system.indexes 中,且默认总是为_id创建索引,它的索引使用基本和MySQL 等关系型数据库一样。其实可以这样说说,索引是凌驾于数据存储系统之上的另一层系统,所以...
  • 索引类型 根据数据库的功能,可在数据库设计器中创建三种类型的索引 — 唯一索引、主键索引和聚集索引。 提示 尽管唯一索引有助于找到信息,但为了获得最佳性能,建议使用主键约束或唯一约束。 唯一索引 唯一索引不...
  • 索引、唯一索引、聚集索引

    千次阅读 2009-12-28 17:59:00
    索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的...
  • 唯一索引与主键索引的比较

    千次阅读 2019-02-20 23:02:51
    唯一索引 唯一索引不允许两行具有相同的索引值。 如果现有数据中存在重复的键值,则大多数数据库都不允许将新创建的唯一索引与表一起保存。当新数据将使表中的键值重复时,数据库也拒绝接受此数据。例如,如果在 ...
  • oracle 创建 唯一索引和非唯一索引

    万次阅读 2017-09-16 13:03:10
    1、打开navicat premium ,打开准备创建索引的数据库的查询编辑器; 2、输入命令:CREATE UNIQUE INDEX 索引名 on 表名(想要创建索引的列名) TABLESPACE 表空间名; CREATE UNIQUE INDEX gcsj0917 ON VEH_...
  • 唯一索引 生产环境已经存在且数据量不大的表 CREATE index "索引名" on "表名"("字段名") tablespace "表空间名" online; 举例: CREATE index IDX_WF_ORDER_CREATE_TIME on WF_ORDER(CREATE_TIME) tablespace ...
  • MySQL InnoDB中唯一索引和非唯一索引时的加锁情况 MySQL的默认隔离级别为RR,这篇文章讨论一下唯一索引和非唯一索引时,使用lock read(consistent read不加锁,不讨论)时的不同的加锁策略。 前提条件是使用了RR...

空空如也

1 2 3 4 5 ... 20
收藏数 2,193,316
精华内容 877,326
关键字:

唯一