【问题标题】:delete rows and return an id of the deleted rows删除行并返回已删除行的 id
【发布时间】:2017-02-25 05:32:33
【问题描述】:

是否可以删除一行并返回已删除行的值?

示例 DELETE FROM table where time <= -1 week SELECT all id that were deleted

【问题讨论】:

标签: mysql sql


【解决方案1】:

如果你想控制数据库中的操作,你可以考虑使用 JOURNAL 表。 SO中有一个关于此的问题here

它们是一个镜像表,通常由执行操作(更新、删除)的触发器填充。它存储“旧值”(您始终可以从主表中获取的当前值)。

如果这样实施,您就可以从日志表中 SELECT 并获得您所需要的。

试着给你举个例子:

表用户

CREATE TABLE USER (
   INT id,
   VARCHAR name
)

表 USER_JN

CREATE TABLE USER_JN (
    INT id,
    VARCHAR name,
    VARCHAR operation
)

然后,对于每个操作,您都可以填充 USER_JN 并拥有所有更改的历史记录(其中不应有约束)。

如果您删除,您的 operation 列将具有 delete 值,您可以使用您的选择进行检查。

这并不完全是“选择删除的行”,而是一种使其成为可能的方法。

希望对你有用。

【讨论】:

  • 谢谢汤姆,我想我会选择这条路线。
  • 不错。这种方法也可以很好地审计系统。干杯。
【解决方案2】:

SELECT id FROM table WHERE time

然后简单地

DELETE FROM 表 WHERE 时间

【讨论】:

  • 感谢您的信息,但我想知道是否有办法在一行中做到这一点?
  • 当然,调用存储过程。一行。
  • 我不是这方面的专家,但我唯一能想到的就是使用"trigger" 来存储信息
  • 井触发器用于在插入更新删除时自动运行。因此,如果这不是预期的行为,请不要这样做。但是,您可以执行按计划触发的事件,例如 cron,但在没有 cron 的情况下烘焙到 mysql 中。见onetwo
【解决方案3】:

我不会搜索非索引列两次。您应该使用如下变量:

SELECT id INTO @tID FROM table WHERE time

从表中删除 id = @tID

然后您可以随意使用变量@tID。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 2023-03-27
    • 2022-07-22
    • 2012-01-20
    相关资源
    最近更新 更多