【发布时间】:2020-04-14 10:43:07
【问题描述】:
我目前正在使用 RDS Aurora DB 上的 sequelize,我需要跟踪哪些表中的哪些记录被删除 - 为此,我创建了一个新表 dbLog。现在我需要在数据库中添加一个触发器,每当表 t1 中的记录被删除时,它将记录的 id 保存到 dbLog 表中。基本上,我需要为已部署的数据库和尚不存在的数据库介绍两种情况。
- 数据库已经存在。这很容易,因为我可以像这样通过原始查询创建触发器
CREATE TRIGGER trigger AFTER DELETE ON t1 FOR EACH ROW
INSERT INTO dbLog ( id, tableName, status, updatedAt )
VALUES (OLD.id, 't1', 'D', NOW())`
- 数据库不存在。这是有问题的,因为它是通过初始化模型然后 sequelize.sync() 创建的。所以我不能只调用原始查询,而是需要在模型中为 t1 表定义这个触发器。这就是我启动表格的方式(简化)
t1.init(
{
id: {
type: new DataTypes.BIGINT,
autoIncrement: true,
primaryKey: true
},
name: {
type: new DataTypes.STRING,
allowNull: false
}
},
{
sequelize,
tableName: 't1',
}
);
问题是我不知道如何创建该触发器。我尝试将这样的内容放入 t1.Init 的属性部分。但是有一些问题,当我检查数据库的触发器时,没有创建任何触发器。我该如何解决?甚至通过这种方式创建的触发器是否与原始查询创建的触发器 1:1 等效?非常感谢。
hooks: {
afterDestroy: function(t1) {
DbLog.create({
id: t1.id,
tableName: 't1',
status: 'D',
updatedAt: '2015-10-02'
})
}
}
【问题讨论】:
标签: mysql sequelize.js database-trigger amazon-aurora