【发布时间】: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