hibernate 复合主键 根据主键删除_mysql删除没有主键的重复记录

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

349623032d28827f53f6a1fe48654c3f.png


于是就打开了本地的mysql,修改配置打开所有执行sql的日志记录,设置general_log:

012631a3811953a266a3c6575a3962c5.png


设置完成之后,执行删除一行数据的操作。

9b29b5e93b79ea1f6dd45163a1de29ae.png


执行成功之后,查看日志,发现原来执行的sql竟然是这样….

7c3f2bcda241cf1b4e12028f89c8ed04.png


原来用limit就可以保证只删除一条,留下一条。
呵呵呵呵呵呵呵呵.....

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值