mysql核心01:索引

在MySQL数据库中,有四种索引:聚集索引(主键索引)、普通索引、唯一索引以及我们这里将要介绍的全文索引(FULLTEXT INDEX)。

唯一索引unique index

https://blog.csdn.net/qq_34581118/article/details/78129285

https://www.yiibai.com/mysql/unique.html
在本教程中,您将学习如何使用MySQL UNIQUE索引来防止表中一个或多个列中拥有重复的值。


CREATE TABLE `contacts` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `first_name` varchar(64) COLLATE utf8mb4_general_ci NOT NULL,
  `last_name` varchar(64) COLLATE utf8mb4_general_ci NOT NULL,
  `phone` varchar(15) COLLATE utf8mb4_general_ci NOT NULL,
  `email` varchar(128) COLLATE utf8mb4_general_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique_email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

不仅希望email是唯一的,也希望name和phone也是唯一的;

CREATE UNIQUE INDEX idx_name_phone
ON contacts(first_name,last_name,phone);


CREATE TABLE `contacts` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `first_name` varchar(64) COLLATE utf8mb4_general_ci NOT NULL,
  `last_name` varchar(64) COLLATE utf8mb4_general_ci NOT NULL,
  `phone` varchar(15) COLLATE utf8mb4_general_ci NOT NULL,
  `email` varchar(128) COLLATE utf8mb4_general_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique_email` (`email`),
  UNIQUE KEY `idx_name_phone` (`first_name`,`last_name`,`phone`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

唯一索引的应用场景之一

https://blog.csdn.net/qq_34581118/article/details/78129285

相同数据多次重复提交,
避免相同数据重复录入数据库;

比如在高并发业务中,数据库单实例的话如何杜绝数据并发插入两条相同的订单号呢?
添加一个唯一索引当然是最快捷的方法之一,
当然是添加索引还是通过业务代码去解决因公司业务而定

唯一索引也是一种索引

博客中的一句话说的很在理,你为了做到数据不能有重复值,但是数据库怎么保证没有重复值呢?当然是在存储数据的时候查一遍,那么怎样查找快呢? 当然是创建索引,所以,在创建唯一约束的时候就创建了唯一索引。这可能也是mysql的一个优化机制

添加/删除唯一索引的sql语句

添加索引
alter table table_name add unique(column)
删除索引
alter table table_name drop index colum_name

需要注意的坑

再添加唯一索引后还有一种特殊情况,那就是如果该字段没有限制非空的话,存在插入NULL值的情况,此时,唯一索引并不起作用,也就是你可以插入n条该字段为null的数据。

除此之外,如果插入空字符串的话,
例如
‘’
‘ ’
不管中间是多少个空字符串在插入的时候都算作‘’ ,即,空串不论多长,只能插入一条。具体代码大家可以自己实现一下

唯一索引与唯一约束的区别

对于这两个不同的名词百度了很久,在mysql中貌似唯一约束就是唯一索引,并没有什么不同,可能叫法不同,在sqlserver中区分还是挺明确的。 sqlserver唯一索引和约束的区别

主键索引

https://www.yiibai.com/mysql/primary-key.html
在本教程中,您将学习如何使用MySQL主键(Primary Key)约束来创建表的主键。
主键索引和主键约束也没啥区别,只不过不同的叫法而已。

普通索引

create index index_name on table_name(字段)

alter table table_name add index index_name(字段)

CREATE TABLE mytable(  
 
ID INT NOT NULL,   
 
username VARCHAR(16) NOT NULL,  
 
INDEX [indexName] (username(length))  
 
);  

删除不同索引

drop index [index_name] on table_name

你可能感兴趣的:(mysql核心01:索引)