问题标签 [sql-delete]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
16 回答
595001 浏览

mysql - MySQL 错误 1093 - 无法在 FROM 子句中指定要更新的目标表

我的数据库中有一个story_category包含损坏条目的表。下一个查询返回损坏的条目:

我试图删除它们执行:

但我得到下一个错误:

#1093 - 您不能在 FROM 子句中指定目标表 'story_category' 进行更新

我该如何克服呢?

0 投票
11 回答
5646 浏览

sql - 数百万行的 SQL 重复删除查询以提高性能

这是一次冒险。我从上一个问题中的循环重复查询开始,但每个循环都会遍历所有1700 万条记录这意味着它需要数周时间(仅*select count * from MyTable*使用 MSSQL 2005 运行我的服务器需要 4:30 分钟)。我从这个网站和这篇文章中得到了一些信息。

并已到达下面的查询。问题是,对于任何类型的性能,这是对 1700 万条记录运行的正确查询类型吗?如果不是,那是什么?

SQL查询:

0 投票
7 回答
75694 浏览

sql-server - 计算 SQL Server 存储过程中删除的行数

在 SQL Server 2005 中,有没有一种方法可以删除行并被告知实际删除了多少行?

我可以select count(*)在相同的条件下做一个,但我需要这个完全值得信赖。

我的第一个猜测是使用@@ROWCOUNT变量 - 但没有设置,例如

总是返回 0。

MSDN 建议OUTPUT构建,例如

这实际上因语法错误而失败。

有任何想法吗?

0 投票
7 回答
10709 浏览

database - 存储过程删除查询

我有存储过程:

当我执行这个时,

结果:0 行受影响。

但是,当我尝试这个查询时:

结果:2 行受影响。

这有什么问题?

0 投票
16 回答
123343 浏览

mysql - SQL查询:从表中删除除最新N之外的所有记录?

是否可以构建单个 mysql 查询(不带变量)以从表中删除所有记录,除了最新的 N(按 id desc 排序)?

像这样的东西,只是它不起作用:)

谢谢。

0 投票
4 回答
32476 浏览

mysql - 从多个表中删除行

我正在尝试使用 SQL 从连接在一起的多个表中删除多行。

表 A 连接到表 B 表 B 连接到表 C

我想删除表 B 和 C 中与表 A 中的行相对应的所有行

0 投票
14 回答
42819 浏览

mysql - 删除匹配行的更快方法?

在数据库方面,我是一个相对新手。我们正在使用 MySQL,我目前正在尝试加速似乎需要一段时间才能运行的 SQL 语句。我在 SO 上四处寻找类似的问题,但没有找到。

目标是删除表 A 中与表 B 中具有匹配 id 的所有行。

我目前正在执行以下操作:

表 a 中大约有 100K 行,表 b 中大约有 22K 行。'id' 列是两个表的 PK。

这条语句在我的测试机上运行大约需要 3 分钟 - Pentium D, XP SP3, 2GB ram, MySQL 5.0.67。这对我来说似乎很慢。也许不是,但我希望加快速度。有没有更好/更快的方法来实现这一点?


编辑:

一些可能有用的附加信息。表 A 和 B 的结构与我为创建表 B 所做的以下操作相同:

表 a(以及表 b)有一些索引来帮助加快对其进行的查询。同样,我是 DB 工作的相对新手,仍在学习。我不知道这对事物有多大影响,如果有的话。我认为它确实有效果,因为索引也必须清理,对吧?我还想知道是否有任何其他可能影响速度的数据库设置。

另外,我正在使用 INNO DB。


以下是一些可能对您有所帮助的附加信息。

表 A 的结构与此类似(我已经对此进行了一些清理):

我怀疑部分问题是该表有许多索引。表 B 看起来与表 B 相似,但它只包含列idh

此外,分析结果如下:


解决了

感谢所有的回复和评论。他们当然让我思考这个问题。感谢 dotjoe通过提出一个简单的问题“是否有其他表引用 a.id?”让我摆脱了这个问题。

问题是表 A 上有一个 DELETE TRIGGER,它调用存储过程来更新另外两个表 C 和 D。表 C 有一个返回到 a.id 的 FK,并且在存储过程中做了一些与该 id 相关的事情之后,它有声明,

我查看了 EXPLAIN 语句并将其重写为,

所以,我可以看到这是在做什么,它给了我以下信息:

这告诉我这是一个痛苦的操作,因为它会被调用 22500 次(对于被删除的给定数据集),这就是问题所在。一旦我在 other_id 列上创建了一个 INDEX 并重新运行 EXPLAIN,我得到:

好多了,事实上真的很棒。

我补充说 Index_1 和我的删除时间与mattkemp报告的时间一致。这对我来说是一个非常微妙的错误,因为在最后一分钟增加了一些额外的功能。事实证明,正如Daniel所说,大多数建议的替代 DELETE/SELECT 语句最终花费了基本相同的时间,并且正如soulmerge提到的那样,该语句几乎是我能够根据什么构建的最好的语句我需要做。一旦我为另一个表 C 提供了索引,我的 DELETE 很快。

事后分析:
从这个练习中学到了两个教训。首先,很明显,我没有利用 EXPLAIN 语句的强大功能来更好地了解我的 SQL 查询的影响。这是一个菜鸟的错误,所以我不会为此而自责。我会从那个错误中吸取教训。其次,有问题的代码是“快速完成”心态的结果,而设计/测试不足导致这个问题没有尽快出现。如果我生成了几个相当大的测试数据集作为这个新功能的测试输入,我不会浪费我和你的时间。我在数据库方面的测试缺乏我的应用程序方面的深度。现在我有机会改进它。

参考:EXPLAIN 语句

0 投票
2 回答
2012 浏览

sql-server - 删除 where 记录字段 < getdate()

当特定字段小于sql 服务器上的日期而不使用表或字段名称时,我无法弄清楚如何删除一组记录。

由于我使用的是 MSSQL,因此查询看起来像这样:

我将如何让 Hibernate 做到这一点?我正在研究 HQL,但我没有看到指定getdate().

0 投票
2 回答
1406 浏览

jpa - 如何在 EJB3 中使用关系执行批量删除

我试图弄清楚如何对@ManyToOne 关系执行批量删除,到目前为止没有成功。

设想:

父母有很多下载,我想删除父母日期为的所有下载> :some_date。我不想删除任何父记录,只是下载记录。下载有一个使用 @ManyToOne 注释映射的父字段。

我正在尝试在 Download 实体上使用 @NamedQuery 来完成此操作。

有什么建议么?

0 投票
3 回答
355 浏览

sql - 删除 SQL 循环

我只想为每个客户端保留 1000 个条目。下面的代码可以满足我的要求,但不会遍历 clientid,而是保留 1000 个客户端。

有没有办法在sql中做到这一点?有人告诉我我需要一个光标,但我希望不需要。