MySQL删除数据1093错误

 更新时间:2024年02月04日 11:32:52   作者:早起的年轻人  
在进行更新和删除操作的时候,条件语句里面有子查询语句,此时会报1093错误,本文就来介绍一下1093错误的解决,感兴趣的可以了解一下

现象:在进行更新和删除操作的时候,条件语句里面有子查询语句,此时会报1093错误!
错误日志:1093 - You can’t specify target table ‘t_suer_study_video’ for update in FROM clause

首先根据条件来查询

SELECT * FROM t_suer_study_video WHERE video_course_id =207;

如下图所求,其中有一个用户有两条数据,train_id 为 null 的那一条数据为重复数据,我需要删除的。

在这里插入图片描述

线上环境中,像上页面这样的数据,不小心产生了几千条,是写的程序的一个bug导致的问题,所以我需要批量删除,先按用户ID分组查询一下:

SELECT user_id, COUNT(*) FROM t_suer_study_video WHERE video_course_id =207 GROUP BY user_id;  

如下图,数量为2的用户的数据就是需要处理的

在这里插入图片描述

然后筛选分组的用户数据

SELECT
	user_id,
	COUNT(*) 
FROM
	t_suer_study_video 
WHERE
	video_course_id = 207 
GROUP BY
	user_id 
HAVING
	COUNT(*) > 1;

我这测试数据,只有一个用户的是重复的,实际中是有多个用户的

在这里插入图片描述

然后删除重复的,就是将上述分组查询出来的重复用户的ID作为条件来删除

DELETE 
FROM
	t_suer_study_video 
WHERE
	video_course_id = 207 
	AND train_id IS NULL 
	AND user_id IN (
					SELECT
						user_id 
					FROM
						t_suer_study_video 
					WHERE
						video_course_id = 207 
					GROUP BY
						user_id 
					HAVING
					COUNT(*) > 1 
	);

出现错误 1093 - You can’t specify target table ‘t_suer_study_video’ for update in FROM clause

在这里插入图片描述

原因:在进行更新和删除操作的时候,条件语句里面有子查询语句,此时会报1093错误!,MySQL在进行读取数据的时候 会加读锁(共享锁),其他请求可以再次加上读锁,但是不能加写锁,(如果在读的过程中,又有其他线程进行了更新操作,就会导致当前线程读取到的数据不是最新的数据,这就是不可重复读现象)。因此不支持对数据更新的同时进行查询操作,加了读锁 就不允许加写锁。

解决办法:外面多嵌套一层查询,原先的查询作为子查询。

DELETE 
FROM
	t_suer_study_video 
WHERE
	video_course_id = 207 
	AND train_id IS NULL 
	AND user_id IN (
				SELECT
					a.user_id 
				FROM
					(
							SELECT
								user_id 
							FROM
								t_suer_study_video 
							WHERE
								video_course_id = 207 
							GROUP BY
								user_id 
							HAVING
								COUNT(*) > 1 
					) a 
	);

删除成功

在这里插入图片描述

 到此这篇关于MySQL删除数据1093错误的文章就介绍到这了,更多相关MySQL 1093错误内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL学习之数据库操作DML详解小白篇

    MySQL学习之数据库操作DML详解小白篇

    本篇文章非常适合MySQl初学者,主要为大家讲解了MySQL数据库的常用操作,有需要的朋友可以借鉴参考下,希望可以有所帮助,祝大家早日进步升职加薪
    2021-09-09
  • 详解mysql三值逻辑与NULL

    详解mysql三值逻辑与NULL

    这篇文章主要介绍了mysql三值逻辑和NULL,感兴趣的同学们,可以参考下,并且把代码实验一下
    2021-05-05
  • 详解Mysql双机热备和负载均衡的实现步骤

    详解Mysql双机热备和负载均衡的实现步骤

    MySQL数据库没有增量备份的机制,但它提供了一种主从备份的机制,就是把主数据库的所有的数据同时写到备份数据库中。这篇文章主要介绍了Mysql的双机热备和负载均衡,需要的朋友可以参考下
    2019-10-10
  • MySQL之浅谈DDL和DML

    MySQL之浅谈DDL和DML

    大家好,本篇文章主要讲的是MySQL之浅谈DDL和DML,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • 利用ssh tunnel链接mysql服务器的方法

    利用ssh tunnel链接mysql服务器的方法

    这篇文章主要给大家介绍了利用ssh tunnel链接mysql服务器的方法,文中介绍的很详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-02-02
  • MySql存储引擎的作用

    MySql存储引擎的作用

    mysql面试中最常问的问题之一:小伙子,你说一下你们公司用的存储引擎,以及你知道有哪些存储引擎和他们之间的区别? 所以下面这篇文章主要给大家介绍了关于Mysql存储引擎的相关资料,需要的朋友可以参考下
    2022-09-09
  • MySQL Hash索引和B-Tree索引的区别

    MySQL Hash索引和B-Tree索引的区别

    MySQL Hash索引和B-Tree索引的区别究竟在哪里呢?相信很多人都有这样的疑问,下文对两者的区别进行了详细的分析,需要的朋友可以参考下
    2014-03-03
  • Linux系统彻底删除Mysql的详细教程

    Linux系统彻底删除Mysql的详细教程

    我们在重新安装MySQL、或更新MySQL版本时,一定会遇到mysql数据残留(脏数据),或组件冲突等问题,下面这篇文章主要给大家介绍了关于Linux系统彻底删除Mysql的详细教程,需要的朋友可以参考下
    2023-02-02
  • 提高SQL代码可读性的10种技巧

    提高SQL代码可读性的10种技巧

    SQL,这门备受推崇的编程语言,在关系数据库操作中扮演着不可或缺的角色,然而,伴随着数据库模式的不断增长和不断演进,编写和维护SQL代码可能会变得相当具有挑战性,为了确保你的SQL代码能够具备高可读性、易维护性以及出色的性能,以下是十个不容忽视的最佳实践
    2023-10-10
  • MySQL免安装版(zip)安装配置详细教程

    MySQL免安装版(zip)安装配置详细教程

    这篇文章主要为大家详细介绍了MySQL免安装版(zip)安装配置详细教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08

最新评论