精华内容
下载资源
问答
  • 唯一索引可以保证数据唯一性
    千次阅读
    2018-01-22 15:34:43

    索引的第一个优点是保证数据的唯一性。


    (1)准确来说,要保证数据的唯一性,这里特指主键索引、唯一索引。

    这2种是比较特别的索引,可以保证数据的唯一性。


    主键索引,其实就是在建表时,指定主键,可以是1个字段,也可以是多个字段的组合,但不管怎样,都不能重复,而且也不能是NULL。

    唯一索引,和主键索引很相似,区别在于唯一索引的字段,可以包含NULL,由于NULL <> NULL,所以,当插入多个NULL值时,也不会报错。


    (2)主键索引、唯一索引,就是B树索引。

    这2种索引,和给一个字段建个索引,没有本质区别,生成的都是B树索引,区别只是字段的值是否可以重复。


    (3)保证数据唯一性的速度

    因为要保证数据的唯一性,所以,在每次插入数据时,会去表里查找,这个值是否已经存在,如果存在,就会报错,不存在,就可以插入。

    而索引本身就是用来加快查找的,这就保证了这个过程会很快的完成,当往表里插入大量数据的时候,这种速度的优越性就体现出来了。

    更多相关内容
  • mysql使用唯一索引避免插入重复数据

    千次阅读 2021-02-07 16:19:55
    使用MySQL 索引防止一个表中的一列或者多列产生重复...幸运的是,MySQL提供了另一种索引,叫做唯一索引,允许我们可以使一个或者多个列的值具有唯一性。另外,不会像主键索引一样,我们的每张表中可以有很多个唯一索...

    使用MySQL 索引防止一个表中的一列或者多列产生重复值

    一:介绍MYSQL唯一索引

    如果要强烈使一列或多列具有唯一性,通常使用PRIMARY KEY约束。 但是,每个表只能有一个主键。 因此,如果使多个列或多个组合列具有唯一性,则不能使用主键约束。

    幸运的是,MySQL提供了另一种索引,叫做唯一索引,允许我们可以使一个或者多个列的值具有唯一性。另外,不会像主键索引一样,我们的每张表中可以有很多个唯一索引

    为了创建一个唯一索引,我们可以来使用CREATE UNIQUE INDEX语法:

    f89aaa38a9119e8df9f554508be89070.png

    如果想要在一个已存在表中添加一个唯一索引,我们可以使用下列的ALTER TABLE语句:

    ALTER TABLE table_name ADD INDEX index_name( column_1,column_2 ) ;

    有一点值得注意下:

    与其他数据库系统不同,MySQL将NULL值视为不同的值。所以,可以在唯一索引中包含很多的空值另一个重点是UNIQUE约束不适用于除BDB存储引擎之外的NULL值。

    二:MySQL唯一索引举例

    假设我们要管理应用程序中的联系人,并且还希望联系人表的每个联系人的电子邮件必须是唯一的。那我们就可以使用CREATE TABLE语句创建唯一约束来满足我们的需求,如下:

    CREATE TABLE IF NOT EXISTS contacts (

    id INT AUTO_INCREMENT PRIMARY KEY,

    first_name VARCHAR(50) NOT NULL,

    last_name VARCHAR(50) NOT NULL,

    phone VARCHAR(15) NOT NULL,

    email VARCHAR(100) NOT NULL,

    UNIQUE Index unique_email (email)

    );

    我们使用show indexes from contacts就能够看到mysql在email这一列中创建一个唯一的索引

    cadb5796100e7e4b71acf06730f0e4a7.png

    现在我们向contacts表中插入一行数据来看下:

    INSERT INTO contacts(first_name,last_name,phone,email)

    VALUES('John','Doe','(408)-999-9765','john.doe@mysqltutorial.org');

    现在我们尝试插入一行email列中有john.doe@mysqltutorial.org, 这时我们就会得到一个报错的信息。

    INSERT INTO contacts(first_name,last_name,phone,email)

    VALUES('Johny','Doe','(408)-999-4321','john.doe@mysqltutorial.org');

    报错如下:

    91eafb8ebc62998dfd1c510d0db533cd.png

    假设我们要一个first_name、last_name、phone的联合索引,我们可以使用下面的语法来得到:

    CREATE UNIQUE INDEX idx_name_phone

    ON contacts(first_name,last_name,phone);

    所以添加了 first_name, last_name, and phone已经存在的行,也是会造成错误的

    INSERT INTO contacts(first_name,last_name,phone,email)

    VALUES('john','doe','(408)-999-9765','john.d@mysqltutorial.org');

    报错如下:

    a19551d55d3c52975e582bf1c39f790e.png

    还有个技巧,在设置好索引的情况下,把insert into 改为 insert ignore into,也可成功实现不重复插入相同数据,

    与上面的区别是:上面会报错,加上ignore不会报错,运行结果只会提示------------ 受影响的行: 0

    这样非常方便爬取数据的存储。

    参考文章:https://zhuanlan.zhihu.com/p/76925239

    展开全文
  • MYSQL分区表如何保证数据唯一性

    千次阅读 2019-12-19 11:31:57
    分区之后表的唯一索引必须带上分区字段。 假设有一张订单表(table_order)业务字段为order_no(订单号),分区字段为create_tm(创建时间);唯一索引就是联合索引order_no+create_tm。 问题: 分布式系统中多个...

    背景:

    由于业务数据量大,采用了分库分表(Mycat);为了提高查询效率,使用了时间来分区;分区之后表的唯一索引必须带上分区字段。

    假设有一张订单表(table_order)业务字段为order_no(订单号),分区字段为create_tm(创建时间);唯一索引就是联合索引order_no+create_tm。

    问题:

    分布式系统中多个节点,对同一订单并发处理,发现table_order中没有该订单,然后都在该表中增加订单。因为订单号没有唯一索引,多个节点都新增数据成功,这就导致table_order中出现多条同样的订单数据

    解决方案一:

    使用数据库唯一索引保证数据唯一性

    建立一张中间表(假设为table_order_no),该表不分区,使用order_no作为唯一索引;同时保证每次在table_order中新增数据时,在table_order_no表中也新增数据。

    解决方案二:

    使用分布式锁防止并发处理

    每次在处理订单时,都去尝试获取分布式锁,只有获取成功才能处理该订单。通过防止并发,保证一次只有一个节点处理订单,可以避免同时插入同一订单,从而保证订单唯一性。

    方案二优化:

    只在新增时,使用分布式锁,避免每次处理都去获取分布式锁,影响性能。

     

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

    千次阅读 2021-01-27 20:54:06
    约束 全称完整约束,它是关系数据库中的对象,用来存放插入到一个表中一列数据的规则,...唯一约束 保证在一个字段或者一组字段里的数据都与表中其它行的对应数据不同。和主键约束不同,唯一约束允许为 NULL,只...

    约束 全称完整性约束,它是关系数据库中的对象,用来存放插入到一个表中一列数据的规则,用来确保数据的准确性和一致性。

    索引 数据库中用的最频繁的操作是数据查询,索引就是为了加速表中数据行的检索而创建的一种分散的数据结构。可以把索引类比成书的目录,有目录的肯定比没有目录的书,更方便查找。

    唯一约束 保证在一个字段或者一组字段里的数据都与表中其它行的对应数据不同。和主键约束不同,唯一约束允许为 NULL,只是只能有一行。

    唯一索引 不允许具有索引值相同的行,从而禁止重复的索引或键值。

    唯一约束和唯一索引都是为了保证表中被限制的字段不允许有重复的值,看起来功能是一样的,那为什么要设计这样两种一样的功能呢?

    首先创建两个字段值一样的表 t1,t2,并为 t1 表中的 col1 列设置唯一约束。

    CREATE TABLE t1 (

    col1 INT(11),

    col2 VARCHAR(20),

    CONSTRAINT t1_uq UNIQUE (col1)

    );

    CREATE TABLE t2 (

    col1 INT(11),

    col2 VARCHAR(20)

    );

    然后为表 t2 表中的 col1 列设置唯一索引

    CREATE UNIQUE INDEX

    t2_idx ON t2 (col1);

    创建表 t3,并将 t1 表中的 col1 列设置为 t3 表中 col2 列的外键

    CREATE TABLE t3 (

    col1 INT(11),

    col2 INT(11),

    col3 VARCHAR(20),

    CONSTRAINT t3_fk FOREIGN KEY (col2) REFERENCES t1 (col1)

    );

    到此为止,基本上就能得出,唯一约束和唯一索引在 MySQL 数据库里区别了

    概念上不同,约束是为了保证数据的完整性,索引是为了辅助查询;

    创建唯一约束时,会自动的创建唯一索引;

    在理论上,不一样,在实际使用时,基本没有区别。

    关于第二条,MySQL 中唯一约束是通过唯一索引实现的,为了保证没有重复值,在插入新记录时会再检索一遍,怎样检索快,当然是建索引了,所以,在创建唯一约束的时候就创建了唯一索引。

    4.唯一性索引

    如果确定某个数据列只包含彼此各不相同的值,在为这个数据列创建索引的时候,就应该用关键字UNIQUE把它定义为一个唯一索引,Mysql会在有新纪录插入数据表时,自动检查新纪录的这个字段的值是否已经在某个记录的这个字段里出现过了。如果是,mysql将拒绝插入那条新纪录。也就是说,唯一索引可以保证数据记录的唯一性。事实上,在许多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复

    5.索引的优点

    5.1.可以通过建立唯一索引或者主键索引,保证数据库表中每一行数据的唯一性

    5.2.建立索引可以大大提高检索的数据,以及减少表的检索行数

    5.3.在表连接的连接条件,可以加速表与表直接的相连

    5.4.在分组和排序字句进行数据检索,可以减少查询时间中分组和排序时所消耗的时间(数据库的记录会重新排序)

    5.5.建立索引,在查询中使用索引,可以提高性能。

    CREATE TABLE parent(2

    3id INT NOT NULL,4

    5PRIMARY KEY (id)6

    7 ) TYPE=INNODB;8

    9CREATE TABLE child(10

    11id INT, parent_id INT,12

    13INDEX par_ind (parent_id),14

    15FOREIGN KEY (parent_id) REFERENCES parent(id)16

    17ON DELETE CASCADE18

    19 ) TYPE=INNODB;

    如下是一个更复杂的例子,其中一个product_order表对其它两个表有外键。一个外键引用一个product表中的双列索引。另一个引用在customer表中的单行索引:

    1 CREATE TABLE product ( 2 3 category INT NOT NULL, 4 5 id INT NOT NULL, 6 7 price DECIMAL, 8 9 PRIMARY KEY(category, id)10 11 ) TYPE=INNODB;12 13  CREATE TABLE customer (id INT NOT NULL,14 15 PRIMARY KEY (id)16 17 ) TYPE=INNODB;18

    19  CREATE TABLE product_order (no INT NOT NULL AUTO_INCREMENT,20 21 product_category INT NOT NULL,22 23 product_id INT NOT NULL,24 25 customer_id INT NOT NULL,26 27 PRIMARY KEY(no), 28 29 INDEX (product_category, product_id),30 31 FOREIGN KEY (product_category, product_id) 32 33 REFERENCES product(category, id)34 35 ON UPDATE CASCADE ON DELETE RESTRICT,36 37 INDEX (customer_id), 38 39 FOREIGN KEY (customer_id)4041 REFERENCES customer(id)42 43 ) TYPE=INNODB;

    展开全文
  • 听说唯一性索引搜索快?

    千次阅读 2022-01-25 14:33:18
    我们建索引的时候,有全文索引、主键索引唯一性索引、普通索引等,前面两个好理解好区分,大家都知道啥时候用,后面两个该如何区分呢?唯一性索引和普通索引该如何选择呢?今天我们就来聊聊这个话题。 1. 准备工作...
  • 高并发下如何保证数据表中唯一性

    千次阅读 2021-03-15 02:27:12
    在说明问题之前我们先来看一段经常性使用的代码function fun(){开启事务try{var count = find();if(count<...我们很当然的认为这很完美,我在代码中进行了唯一性验证,数据表中肯定不会存在相同的...
  • 如何保证数据库表中数据唯一性

    千次阅读 2019-09-11 10:42:55
    在很多时候,我们需要保证数据库表中某条数据是唯一的,那如何保证数据库表中数据唯一性呢?这个值得探讨一下
  • Oracle多个字段联合索引保证唯一性

    千次阅读 2021-09-26 16:00:30
    今天在开发过程中遇到了需要两个字段联合保证唯一性,所以查阅了一些资料和博客,梳理一下以便之后用到!!! 首先,你要搞明白什么是唯一索引和唯一约束,其次它们之间的区别是什么? 前提 二者的定义 唯一...
  • 今天刚创建了一个表,为订单号创建了唯一索引。 在测试同学测试的过程中,看了一下数据,竟然有重复订单号? 怎么想都想不明白,问了另一个大牛,他告诉我: 因为分库分表了。唯一键只能保证一个库中不重复,而不同...
  • 约束和索引的区别:前者用来检查数据的正确性,后者用来优化...创建唯一性约束会创建一个约束和一个唯一性索引,创建唯一性索引只会创建一个唯一性索引。 主键约束和唯一性约束都会创建一个唯一性索引。    ...
  • MySQL字段唯一性约束与唯一索引

    千次阅读 2021-09-03 08:28:39
    唯一约束和唯一索引,都可以实现数据列的唯一性,列值可以为null(允许存在多个null值) 创建唯一性约束,会自动创建一个同名的唯一索引,这个索引不能够单独删除,删除唯一约束会自动删除索引。唯一约束是通过唯一...
  • 前段时间我踩过一个坑:在mysql8的一张innodb引擎的表中,加了唯一索引,但最后发现数据竟然还是重复了。到底怎么回事呢?本文通过一次踩坑经历,聊聊唯一索引,一些有意思的知识点。
  • 表索引普通索引唯一索引全文索多列索引隐藏索引删除索引设计原则 普通索引 索引存储: 数据库底层索引实现主要有两种存储类型,B树(BTREE)和哈希(HASH)索引,InnoDB和MyISAM 使用BTREE索引;而MEMORY 存储引擎可以...
  • 在项目中遇到并发导入excel数据到同一张表,  最初没有设置unique索引,导致在多线程并发导入excel数据的时候,业务上要求供应商代码不...因为失效删除的数据是打了标记的,有效的相同供应商代码还是可以插入进来...
  • 别踩坑!使用MySQL唯一索引请注意

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

    千次阅读 2022-04-12 11:22:47
    为NULL的字段可以设置唯一索引 1:多条字段为NULL的记录,可以正常插入数据库中 2:重复值插入会正常校验重复值 Tips:设置字符串null也是会校验重复值 测试3770条NULL值记录,一条有值的记录。单独查询这个...
  • mysql索引(七)唯一索引

    万次阅读 2021-07-19 11:17:54
    唯一索引(UNIQUE):与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。 主键索引(PRIMARY):它 是一种特殊的唯一索引,不允许有空值。 全文索引(FULLTEXT ):可用于 MyISAM 表,mysql5.6之后也可...
  • ORA-00001: 违反唯一约束条件 这一个报错相信大家在插入数据时还是经常遇到的,尤其是在测试环境。 但是今天我在处理一个生产问题的时候再次遇到这个报错时有点奇怪: 1.该表(记为表A)的主键是数据库序列生成的,...
  • 唯一索引、聚集索引和聚集索引

    千次阅读 2021-02-02 22:05:12
    1.一个表只能有一个主索引-...唯一索引,可以存在于自由表,但索引关键字不可以重复.4.普通索引简单的理解就是只起排序作用.索引关键字是可以重复的.可存在于自由表.主键与唯一索引的区别主键是一种约束,唯一索引是一...
  • 主键约束、唯一性约束、唯一索引

    千次阅读 2018-07-22 00:23:40
    1.主键约束(PRIMARY KEY) 1) 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键。...1) 唯一性约束用来限制不受主键约束的列上的数据唯一性,用于作为访问某行的可选手段,一个表上可以放置多...
  • 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是...也就是说,唯一索引可以保证数据记录的唯一...
  • Mysql的唯一性索引unique

    千次阅读 2021-09-13 11:44:23
    唯一性索引unique影响: 唯一性索引表创建: 唯一性索引作用: unique与primary key的区别: 存在唯一键冲突时,避免策略: insert ignore: replace into: insert on duplicate key update: 死锁: ...
  • GBase8s 唯一索引与非唯一索引

    千次阅读 2022-01-21 10:17:34
    GBase8s 唯一索引与非唯一索引
  • 解决办法:唯一索引可在索引列插入多次null email可以有多条email为null的记录,将冲突的字段设置为null,解决 在sql server中,唯一索引字段不能出现多个null值 在mysql 的innodb引擎中,是允许在唯一索引的字段中...
  • 在Elasticsearch中,实现像数据库中的联合唯一性索引,有没有好的解决方案呀?
  • 普通索引 这是最基本的索引类型,而且它没有唯一性之类的限制。 唯一性索引 这种索引和前面的“普通索引”基本相同,...对于唯一索引来说,由于索引定义了唯一性,查找到第一个满足条件的记录后,就会停止继续检索...
  • 1 概念区分 普通索引和唯一索引 ... 不同的是,在一张表里面只能有一个主键,主键不能为空,唯一索引可以有多个,唯一索引可以有一条记录为空,即保证跟别人不一样就行。 比如学生表,在学校里面一般用学号
  • 2. 知识剖析MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。创建索引时,你需要确保该索引是应用在SQL 查询语句的条件(一般作为 WHERE 子句的条件)。实际上,索引也是一张表,该...
  • MySQL中的唯一索引的简单学习教程mysql 唯一索引UNIQUE一般用于不重复数据字段了我们经常会在数据表中的id设置为唯一索引UNIQUE,下面我来介绍如何在mysql中使用唯一索引UNIQUE吧。创建唯一索引的目的不是为了提高...
  • 【MySQL】唯一索引与普通索引的区别

    千次阅读 2022-04-03 05:58:31
    唯一索引上的字段的数据只能是唯一的,而普通索引可以有重复数据。 以 SELECT * FROM user WHERE k=5 为例, 对于普通索引来说,k 是普通索引的话,会在普通索引上面找出满足条件的值,找到之后会继续往下找。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 358,684
精华内容 143,473
热门标签
关键字:

唯一索引可以保证数据唯一性

友情链接: Android_word_m.rar