问题标签 [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.
mysql - MySQL 错误 1093 - 无法在 FROM 子句中指定要更新的目标表
我的数据库中有一个story_category
包含损坏条目的表。下一个查询返回损坏的条目:
我试图删除它们执行:
但我得到下一个错误:
#1093 - 您不能在 FROM 子句中指定目标表 'story_category' 进行更新
我该如何克服呢?
sql-server - 计算 SQL Server 存储过程中删除的行数
在 SQL Server 2005 中,有没有一种方法可以删除行并被告知实际删除了多少行?
我可以select count(*)
在相同的条件下做一个,但我需要这个完全值得信赖。
我的第一个猜测是使用@@ROWCOUNT
变量 - 但没有设置,例如
总是返回 0。
MSDN 建议OUTPUT
构建,例如
这实际上因语法错误而失败。
有任何想法吗?
database - 存储过程删除查询
我有存储过程:
当我执行这个时,
结果:0 行受影响。
但是,当我尝试这个查询时:
结果:2 行受影响。
这有什么问题?
mysql - SQL查询:从表中删除除最新N之外的所有记录?
是否可以构建单个 mysql 查询(不带变量)以从表中删除所有记录,除了最新的 N(按 id desc 排序)?
像这样的东西,只是它不起作用:)
谢谢。
mysql - 从多个表中删除行
我正在尝试使用 SQL 从连接在一起的多个表中删除多行。
表 A 连接到表 B 表 B 连接到表 C
我想删除表 B 和 C 中与表 A 中的行相对应的所有行
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 相似,但它只包含列id
和h
。
此外,分析结果如下:
解决了
感谢所有的回复和评论。他们当然让我思考这个问题。感谢 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 查询的影响。这是一个菜鸟的错误,所以我不会为此而自责。我会从那个错误中吸取教训。其次,有问题的代码是“快速完成”心态的结果,而设计/测试不足导致这个问题没有尽快出现。如果我生成了几个相当大的测试数据集作为这个新功能的测试输入,我不会浪费我和你的时间。我在数据库方面的测试缺乏我的应用程序方面的深度。现在我有机会改进它。
sql-server - 删除 where 记录字段 < getdate()
当特定字段小于sql 服务器上的日期而不使用表或字段名称时,我无法弄清楚如何删除一组记录。
由于我使用的是 MSSQL,因此查询看起来像这样:
我将如何让 Hibernate 做到这一点?我正在研究 HQL,但我没有看到指定getdate()
.
jpa - 如何在 EJB3 中使用关系执行批量删除
我试图弄清楚如何对@ManyToOne 关系执行批量删除,到目前为止没有成功。
设想:
父母有很多下载,我想删除父母日期为的所有下载> :some_date
。我不想删除任何父记录,只是下载记录。下载有一个使用 @ManyToOne 注释映射的父字段。
我正在尝试在 Download 实体上使用 @NamedQuery 来完成此操作。
有什么建议么?
sql - 删除 SQL 循环
我只想为每个客户端保留 1000 个条目。下面的代码可以满足我的要求,但不会遍历 clientid,而是保留 1000 个客户端。
有没有办法在sql中做到这一点?有人告诉我我需要一个光标,但我希望不需要。