在mysql数据库中可能会出现没有唯一约束导致的数据会有多条的问题,那么我们怎么删除多余的数据只保留其中一条数据。这里有一些方法可以快速进行删除多余的数据

新建示例表结构和数据


CREATE TABLE `user` (
  `name` varchar(20) DEFAULT NULL,
  `age` int DEFAULT NULL,
  `id` int NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB 

INSERT INTO test.user (name, age) VALUES ('张三', 20);
INSERT INTO test.user (name, age) VALUES ('李四', 21);
INSERT INTO test.user (name, age) VALUES ('李四', 21);
INSERT INTO test.user (name, age) VALUES ('李四', 22);
INSERT INTO test.user (name, age) VALUES ('王五', 18);
INSERT INTO test.user (name, age) VALUES ('赵六', 21);
INSERT INTO test.user (name, age) VALUES ('赵六', 45);

我们需要实现的效果是,删除user表中name重复的数据,只保留一条,那么可以使用如下方法进行处理:

方法一(注意版本,实测5.6.11版本可以,5.7以上版本不支持):


ALTER IGNORE TABLE user ADD unique key uk_name (name);

方法二:

CREATE TABLE tmp SELECT name, age FROM user  GROUP BY name;
DROP TABLE user;
ALTER TABLE tmp RENAME TO user;

方法三(该方法会删除除了ID最小的所有重复name的数据):

delete a from user a, user b where a.name = b.name and a.id > b.id;

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐