在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