问题标签 [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 投票
2 回答
1696 浏览

sql - Tips for deduping a list based on priority column

I have a set of rows that contain duplicate entries because the data originates from multiples sources. I also have a separate reference table that indicates the priority of those data sources.

Does anyone have good tips for the most effective t-SQL to deduplicate this list?

Basically I have:

I have been placing this into a temp table and then deleting in an odd way that I suppose could be more efficient.

Table A has the same columns for the two sources, but the data can differ - so they may have different prices. The challenge is that I must take the price (and all other info) from the row that comes from the source with the highest priority. To complicate matters, I do not have data for every item from ALL sources.

So, item 1 may have data from source A and B, while item 2 may only have it from source B and C. Thus, the deletion needs to happen on a per-unique item basis.

0 投票
15 回答
127756 浏览

sql - 在 SQL 中,UPDATE 总是比 DELETE+INSERT 快吗?

假设我有一个包含以下字段的简单表:

  1. ID: int, autoincremental (identity), 主键
  2. 名称:varchar(50),唯一,具有唯一索引
  3. 标签: int

我从不使用 ID 字段进行查找,因为我的应用程序始终基于使用 Name 字段。

我需要不时更改标签值。我正在使用以下简单的 SQL 代码:

我想知道是否有人知道上述是否总是比:

再次 - 我知道在第二个示例中 ID 已更改,但这对我的应用程序无关紧要。

0 投票
16 回答
101495 浏览

mysql - 删除 MySQL 中的数百万行

我最近在我正在处理的一个站点中发现并修复了一个错误,该错误导致表中存在数百万行重复的数据,即使没有它们也会非常大(仍然是数百万行)。我可以很容易地找到这些重复的行,并且可以运行一个删除查询来将它们全部杀死。问题是尝试一次删除这么多行会长时间锁定表,如果可能的话,我想避免这种情况。我可以看到摆脱这些行的唯一方法是:

  1. 编写一个脚本,将循环执行数千个较小的删除查询。从理论上讲,这将解决锁定表问题,因为其他查询将能够使其进入队列并在删除之间运行。但它仍然会大大增加数据库的负载,并且需要很长时间才能运行。
  2. 重命名表并重新创建现有表(它现在为空)。然后对重命名的表进行清理。重命名新表,重新命名旧表并将新行合并到重命名的表中。这种方式需要更多的步骤,但应该以最小的中断完成工作。这里唯一棘手的部分是有问题的表格是一个报告表,所以一旦它被重命名并且空的那个放在它的位置,所有历史报告都会消失,直到我把它放回原位。另外,由于存储的数据类型,合并过程可能会有点麻烦。总的来说,这是我现在可能的选择。

我只是想知道以前是否有其他人遇到过这个问题,如果有,你是如何在不关闭网站的情况下处理它的,并且希望对用户的干扰最小?如果我采用 2 号或其他类似的方法,我可以安排这些东西在深夜运行,并在第二天一大早进行合并,并提前让用户知道,所以这不是什么大不了的事。我只是想看看是否有人对更好或更简单的清理方法有任何想法。

0 投票
4 回答
71 浏览

mysql - 如何禁止删除特定mysql表中的任何行?

有没有办法配置一个 mysql 表,以便可以写入和读取但不能删除?

例如,一个表包含许多在法律上很重要且绝对不能删除的日志。

0 投票
1 回答
158 浏览

sql - 从两个数据库中删除重复记录

我设法识别来自两个不同数据库的重复记录:

如何从中删除重复记录b

我试过了:

但它删除的内容超出了我的需要。

0 投票
5 回答
18415 浏览

mysql - MySQL删除子查询的所有结果

好的,所以如果您想了解背景故事,请查看我的上一个问题

找出我的哪些记录不是重复的很容易:

这将返回我所有的非重复项。所以我想我会将它们移到另一个名为“no_duplicates”的表中,然后将它们从原始表中删除。然后我可以在原始表中单独看到重复项,修复它们,然后将 no_dupes 添加回来。但是同时:

像魅力一样工作,以下引发错误:

我的猜测是,虽然查询返回唯一的、已在表中的记录,但通过聚合函数删除是不合理的。这是可以理解的,除了我不知道我还能做些什么来确保只删除我移动的记录。我搜索并没有发现“在插入原始表中的记录之后”语法,我的猜测是它无论如何都会失败,原因与删除失败的原因相同。

那么,有人可以帮我找到丢失的部分吗?

0 投票
4 回答
1705 浏览

mysql - 在没有 WHERE 的情况下删除后 MySQL 自动递增值

跑步后发现,

我的 ID(自动递增)值变得很奇怪

按照这个顺序,当我做一个时,

我知道认证指南说,当使用 DELETE without WHERE 清空表时,ID 可能会或可能不会被重置,但是是什么导致 ID 序列如此奇怪?我很确定这是插入行的顺序。最初在删除之前,我在表中有 6 行,所以 7、8、9 似乎可以理解。

0 投票
4 回答
7227 浏览

python - Python MySQL - SELECT 有效但 DELETE 无效?

我是 Python 和 Python 的 MySQL 适配器的新手。我不确定我是否在这里遗漏了一些明显的东西:

有任何想法吗?

0 投票
2 回答
383 浏览

mysql - SQL DELETE 在 PHPmyAdmin 中失败

SQL DELETE 在 PHPmyAdmin 中失败。不知道为什么;是因为 LEFT OUTER JOIN 吗?

此 SQL 查询因 (#1064 - You have an error in your SQL syntax;) 消息而失败,但使用 SELECT 而不是 delete 时效果很好,这是为什么呢?

0 投票
4 回答
217 浏览

sql - SQL 批量删除

我正在尝试缩小一些数据库,以便我的开发人员可以将它们加载到他们的本地机器上。我已经确定了几个包含历史数据(价值 10 年以上)的表,如果我删除超过 X 天的记录,它们将显着减少整体数据库大小(50% 或更多)。

我正在使用的 delete 语句如下所示,但我的问题是,如何提高这个 delete 语句的速度?数据库已经采用简单的日志记录格式,但日志仍然随着删除语句而增长。有更好的记录方法吗?

我这样做会更好吗:

  1. 将我要保留的数据从当前表复制到临时表中,
  2. 截断主表,
  3. 将数据从 temp 移回主节点,
  4. 收缩日志,
  5. 完成所有需要收缩的表后收缩数据库。

查询示例: