我们在MySQL数据库时,有时不希望存入重复的数据。比如用户表中想要每个用户的用户名不重复。除了,在插入数据时使用程序查询数据库判断,我们还可以使用MySQL数据库的唯一索引进行限制。以下说下具体操作方法:
1.在数据库表中为某个字段设置唯一索引,比如用户表中的 username 字段,设置唯一索引 UNIQUE
ALTER TABLE user ADD UNIQUE username_unique (username);
注意:在创建唯一索引时,有时会出现提示 ERROR 1062 (23000): Duplicate entry ‘***’ for key ‘username_unique’。这个问题的原因是该字段中已经存在重复的值,所以不能直接创建唯一索引。解决办法是删除重复的值,或清空表数据。
2.SQL插入语句修改,这里有三种方法插入数据
2.1 使用 ignore 关键字
INSERT IGNORE INTO user(username,password) values('admin','123456');
使用 ignore 关键字插入数据时,如果索引为唯一索引或主键索引的字段有重复的记录会忽略插入,执行返回0。
2.2 使用 repalce into 关键字
REPLACE INTO user(username,password) values('admin','123456');
使用replace into 插入数据,如果索引为唯一索引或主键索引的字段有重复的记录,它会先将字段重复的那条数据删除,再插入新数据。返回受影响的行数,这个数是删除与插入的行数总和。
2.3 使用 on duplicate key update
INSERT INTO user(username,password) values('admin','123456') ON DUPLICATE KEY UPDATE password = 456789;
这句sql语句的含义是,当username的索引是唯一索引或主键索引时,插入的数据重复,就执行UPDATE语句。类似于下面的语句
UPDATE user SET password = 456789 WHERE username = 'admin';
小提示:善用MySQL的索引功能,可以大大提升数据库的性能。