ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL使用记录

2021-11-22 16:00:15  阅读:206  来源: 互联网

标签:BUILDING 记录 ILLEGAL MySQL CHECKS disposal 使用 ID SELECT


最近换了个新环境,用的自己完全陌生的技术栈,angular,还是版本比较老的,JS很多原生的方法都用不成;

这两天给了个任务,让我把平台上一些存量数据处理掉,需要完成流程图节点、上传文件;

在做的时候发现有些地方还是值得记录一下的;

比如,前期测试的时候,流程没走下去,后端也执行了insert插入语句,导致生成很多条记录;

沿着调用的接口,在前端、后端代码打断点,发现数据来源于表illegal_disposal;

后来请教了后端同学得知BUILDING_ILLEGAL_ID不会有重复的,只有一个;

比如我某条信息生成4个记录,F12查看接口返回的数据,有个id刚好与BUILDING_ILLEGAL_ID值一致;

于是自己打算利用之前学过的.net做个小程序去删除重复数据;

用.net 5.0、NLog、MySQLHelper.cs搭了个控制台程序框架;

在拼sql语句时,突然想起来或许一句sql代码就可以实现想要的功能;

最后拼出来两条sql语句

-- 查看数据重复的数据,及重复多少次
select BUILDING_ILLEGAL_ID,count(*) as count from illegal_disposal group by BUILDING_ILLEGAL_ID having count>1;
-- 根据id进行删除,保留BUILDING_ILLEGAL_ID相同的最小的id;
DELETE FROM illegal_disposal 
WHERE 1=1
    AND `BUILDING_ILLEGAL_ID` in (SELECT * FROM ( (SELECT `BUILDING_ILLEGAL_ID` `BUILDING_ILLEGAL_IDS` FROM illegal_disposal GROUP BY BUILDING_ILLEGAL_ID HAVING COUNT(`BUILDING_ILLEGAL_ID`)>1) ) a)
    AND id not in (SELECT * FROM ( (SELECT MIN(id) ids FROM illegal_disposal GROUP BY BUILDING_ILLEGAL_ID HAVING COUNT(`BUILDING_ILLEGAL_ID`)>1) ) b)

在执行delete语句的时候发现删除失败,提示的有外键关联;

MySQL中设置了foreign key关联,造成无法更新或删除数据。我通过设置FOREIGN_KEY_CHECKS变量来避免这种情况。

先禁用外键约束,可以使用:

SET FOREIGN_KEY_CHECKS=0;

然后再执行删除数据的语句

删除后,把关掉的外键约束启用起来,可以用:

SET FOREIGN_KEY_CHECKS=1;

最后可以通过这个命令查看当前FOREIGN_KEY_CHECKS的值:

SELECT @@FOREIGN_KEY_CHECKS;

确认是没问题的,OK了

标签:BUILDING,记录,ILLEGAL,MySQL,CHECKS,disposal,使用,ID,SELECT
来源: https://www.cnblogs.com/chenjin2136/p/15588932.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有