如何使用 knex.js 和 MySQL 自动更新记录
How to auto update record with knex.js and MySQL
这是我的第一个post,所以如果我有什么不对的地方请指正。
我在 MySQL 中有一些 tables 有 updated_at
列,我想在 tables 更新时更新它的值。它与这样解决的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 来解决这个问题。
我尝试过类似的方法,但那样我就无法动态地更改 table:
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);
我测试了 this 解决方案,它对我有用。它不是最好的,但对于我的项目来说已经足够了。
基本上,当我更新我的记录时,我的控制器会自动用当前日期更新 updated_at
列。
这是我的第一个post,所以如果我有什么不对的地方请指正。
我在 MySQL 中有一些 tables 有 updated_at
列,我想在 tables 更新时更新它的值。它与这样解决的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 来解决这个问题。 我尝试过类似的方法,但那样我就无法动态地更改 table:
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);
我测试了 this 解决方案,它对我有用。它不是最好的,但对于我的项目来说已经足够了。
基本上,当我更新我的记录时,我的控制器会自动用当前日期更新 updated_at
列。