mysql如何删除两条一模一样的数据保留一条
由于各种历史原因,有些数据库表可能没有主键,那么就有可能会存在两条一模一样的数据,如何去重删掉一条呢。
我们老版本um相关的表是没有主键的。有一次发布上线的时候,因为手动重复执行了新增菜单的sql,导致菜单表里面有两条一模一样的数据记录(因为um相关的几张系统菜单表没有主键),那么就要做一次去重,删除重复数据中的一条数据。
所以就遇到了标题中的问题:如何删除两条一模一样的数据,delete语句的where条件无法区分开来一模一样的数据,而mysql又没有rowid这种东西,当时想了一下没有想到合适的sql语句,最后用的方法是把重复的数据全部删掉,再重新insert一次进去。
回来之后就又想到这个问题,网上查了一些方法,都不怎么理想,还有说使用alter table临时加个主键的做法。突然想到我们使用navicat客户端的时候,可以删除指定行的那一条数据,这个操作到底执行的是什么sql呢?
于是就打开了本地的mysql,修改配置打开所有执行sql的日志记录,设置general_log:
设置完成之后,执行删除一行数据的操作。
执行成功之后,查看日志,发现原来执行的sql竟然是这样….
原来用limit就可以保证只删除一条,留下一条。
呵呵呵呵呵呵呵呵.....