unique key index区别

这种关系大致是这样的:[en]The relationship goes something like this:

mysql中的unique约束是通过索引实现的;

key的含义是概念级别的,意味着唯一性,key的概念等价于unique;

因此,只要添加唯一约束或键,就会创建索引。[en]So as long as you add a unique constraint or key, an index will be created.

在mysql中,使用index或者unique(以及key)都会简历索引,区别在于是否允许重复,这个可以在show index命令中看到。

<ol class="hljs-ln"><li><div class="hljs-ln-code"><p class="node-read-div2p"><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> user1(</p></div></li><li><div class="hljs-ln-code"><p class="node-read-div2p">  <span class="hljs-keyword">id</span> <span class="hljs-built_in">INT</span> PRIMARY <span class="hljs-keyword">KEY</span> AUTO_INCREMENT <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'&#x4E3B;&#x952E;'</span>,</p></div></li><li><div class="hljs-ln-code"><p class="node-read-div2p">  <span class="hljs-keyword">name</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">200</span>) <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'&#x59D3;&#x540D;'</span>,</p></div></li><li><div class="hljs-ln-code"><p class="node-read-div2p">  age    <span class="hljs-built_in">int</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'&#x5E74;&#x9F84;'</span>,</p></div></li><li><div class="hljs-ln-code"><p class="node-read-div2p">  <span class="hljs-keyword">unique</span> aaa (<span class="hljs-string">name</span>, <span class="hljs-string">age</span>)</p></div></li><li><div class="hljs-ln-code"><p class="node-read-div2p">)</p></div></li><li><div class="hljs-ln-code"><p class="node-read-div2p"><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> user1(</p></div></li><li><div class="hljs-ln-code"><p class="node-read-div2p">  <span class="hljs-keyword">id</span> <span class="hljs-built_in">INT</span> PRIMARY <span class="hljs-keyword">KEY</span> AUTO_INCREMENT <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'&#x4E3B;&#x952E;'</span>,</p></div></li><li><div class="hljs-ln-code"><p class="node-read-div2p">  <span class="hljs-keyword">name</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">200</span>) <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'&#x59D3;&#x540D;'</span>,</p></div></li><li><div class="hljs-ln-code"><p class="node-read-div2p">  age    <span class="hljs-built_in">int</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'&#x5E74;&#x9F84;'</span>,</p></div></li><li><div class="hljs-ln-code"><p class="node-read-div2p">  <span class="hljs-keyword">constraint</span> aaa <span class="hljs-keyword">unique</span>(<span class="hljs-string">name</span>, <span class="hljs-string">age</span>)</p></div></li><li><div class="hljs-ln-code"><p class="node-read-div2p">)</p></div></li></ol>

这两条建表语句都创建了一个联合索引:[en]Both table-building statements create a joint index:

mysql> show index from user1;
+——-+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+—————+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+——-+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+—————+
| user1 | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | |
| user1 | 0 | aaa | 1 | name | A | 0 | NULL | NULL | YES | BTREE | | |
| user1 | 0 | aaa | 2 | age | A | 0 | NULL | NULL | YES | BTREE | | |
+——-+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+—————+
3 rows in set (0.00 sec)

它们都有一个索引,第二列指示是否允许索引重复。0表示不允许重复。[en]All have an index, and the second column indicates whether the index is allowed to repeat. 0 means repetition is not allowed.

然后删除该AAA的唯一性,创建一个正常索引:[en]Then delete the unique of this aaa and create a normal index:

mysql> drop index aaa on user1;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> create index aaa on user1(name, age);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> show index from user1;
+——-+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+—————+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+——-+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+—————+
| user1 | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | |
| user1 | 1 | aaa | 1 | name | A | 0 | NULL | NULL | YES | BTREE | | |
| user1 | 1 | aaa | 2 | age | A | 0 | NULL | NULL | YES | BTREE | | |
+——-+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+—————+
3 rows in set (0.00 sec)

您可以看到仍然有一个索引,但第二列1表示该索引可以复制。[en]You can see that there is still an index, but the second column 1 indicates that the index can be duplicated.

原文地址:https://blog.csdn.net/u010900754/article/details/94314066

Original: https://www.cnblogs.com/jpfss/p/12190945.html
Author: 星朝
Title: unique key index区别

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/6145/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

发表回复

登录后才能评论
免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部