【问题标题】:How to auto update record with knex.js and MySQL如何使用 knex.js 和 MySQL 自动更新记录
【发布时间】:2021-06-11 13:34:22
【问题描述】:

这是我的第一篇文章,如果我做错了,请纠正我。
我在 MySQL 中有一些表有 updated_at 列,我想在表更新时更新它的值。它与以这种方式解决的this problem 非常相似:

const ON_UPDATE_TIMESTAMP_FUNCTION = `
  CREATE OR REPLACE FUNCTION on_update_timestamp()
  RETURNS trigger AS $$
  BEGIN
    NEW.updated_at = now();
    RETURN NEW;
  END;
$$ language 'plpgsql';
`

const DROP_ON_UPDATE_TIMESTAMP_FUNCTION = `DROP FUNCTION on_update_timestamp`

exports.up = knex => knex.raw(ON_UPDATE_TIMESTAMP_FUNCTION)
exports.down = knex => knex.raw(DROP_ON_UPDATE_TIMESTAMP_FUNCTION)

否则,链接问题是由 Postgres 造成的,而我的 RDB 是 MySQL,所以我想知道是否有办法用 MySQL 来解决这个问题。 我尝试了类似的方法,但这样我无法动态更改要更改的表:

const CUSTOM_FUNCTIONS = `
ALTER TABLE NEW
    CHANGE updated_at
        updated_at TIMESTAMP NOT NULL
            DEFAULT CURRENT_TIMESTAMP
            ON UPDATE CURRENT_TIMESTAMP;
`

const DROP_CUSTOM_FUNCTIONS = `
DROP FUNCTION on_update_timestamp;
`

exports.up = async (knex) => knex.raw(CUSTOM_FUNCTIONS);
exports.down = async (knex) => knex.raw(DROP_CUSTOM_FUNCTIONS);

【问题讨论】:

  • new as table name 是一个非常糟糕的主意,重命名你的表,其余的都可以
  • @nbk NEW 不是表名。在 Postgres 中,另一个人使用 NEW 作为输入表来进行相对操作。主要问题就在这里,因为我不知道如何接收任何带有NEW 名称的表格......我不知道我是否解释得很好,所以如果问题很清楚,请回答我。反正我会把链接的代码放在帖子里。
  • 请参阅文档dev.mysql.com/doc/refman/8.0/en/alter-table.html ALTER TABLE 在此位置没有 NEW 作为选项,需要表名
  • 好的,我想我明白你的桌子的名字是什么
  • 没错。那么有没有办法相对获取当前表并将其传递给raw?

标签: javascript mysql node.js knex.js


【解决方案1】:

我测试了this 解决方案,它对我有用。这不是最好的,但对于我的项目来说已经足够了。 基本上,当我更新我的记录时,我的控制器会自动将updated_at 列更新为当前日期。

【讨论】:

    猜你喜欢
    • 2016-08-12
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    • 2018-06-02
    相关资源
    最近更新 更多