【问题标题】:How to update a timestamp column whilst making a select to another table如何在选择另一个表时更新时间戳列
【发布时间】:2021-02-05 15:35:51
【问题描述】:

我有 2 张桌子:

CREATE TABLE IF NOT EXISTS t1
(
    id UUID NOT NULL,
    last_login TIMESTAMP,
    PRIMARY KEY (id)
);

CREATE TABLE IF NOT EXISTS t2
(
    id UUID NOT NULL,
    t1_id UUID NOT NULL,
    PRIMARY KEY (id),

    CONSTRAINT ids
        FOREIGN KEY (t1_id)
            REFERENCES t1 (id)
            ON DELETE CASCADE
            ON UPDATE NO ACTION

);

我想从t2中选择一行并更新t1表中对应t1 id的last_login时间戳。 p>

是否可以在单个查询中执行此操作?

【问题讨论】:

  • 您需要在应用程序级别执行此操作。我认为任何数据库都不支持基于select 查询的“触发器”。
  • SELECT 语句无法更新数据。但是,听起来您想要一个 AFTER LOGIN 触发器,这就是我在 Oracle 中实现它的方式。显然 Postgresql 不支持登录触发器,但有类似的东西 - see this question and its answers

标签: sql database postgresql jooq


【解决方案1】:

您不能在同一个 SQL 操作中同时使用 UPDATESELECT。不过,您有一些选择:

  1. 在应用程序级别执行 - 更新登录,然后选择数据
  2. 将其作为一个 SPROC / 函数执行,您可以在两个操作按顺序执行的情况下执行,如果需要可能回滚
  3. 使用触发器独立更新登录信息
  4. 如果它们始终是 1 对 1,则将表格组合起来以简化事情

【讨论】:

  • 如果你想返回结果集而不是存储过程,你可以在 Postgres 中使用函数
猜你喜欢
  • 1970-01-01
  • 2013-11-02
  • 2018-03-23
  • 2020-09-09
  • 2023-04-02
  • 2017-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多