从Oracle到MariaDB的迁移-触发器,自引用表

从Oracle到MariaDB的迁移-触发器,自引用表,oracle,triggers,mariadb,self-referencing-table,Oracle,Triggers,Mariadb,Self Referencing Table,我正在将Oracle数据库迁移到MariaDB,我不确定如何在我的一个表上创建自引用ID 本质上,如果未指定属于\u id,它将假定它属于自身(与插入时生成的id相同);但是,如果指定了属于\u-to\u-id,则它将使用该id 我这样做的原因是因为我的帖子和回复存储在同一个表中。如果id=属于\u-to\u-id,则它是一篇发起文章,而如果它不同,则是对另一篇文章的回复 我曾考虑让我的应用程序(Node JS)使用last_insert_id进行快速的更新——但这看起来相当混乱,如果可能的话,

我正在将Oracle数据库迁移到MariaDB,我不确定如何在我的一个表上创建自引用ID

本质上,如果未指定
属于\u id
,它将假定它属于自身(与插入时生成的
id相同);但是,如果指定了
属于\u-to\u-id
,则它将使用该id

我这样做的原因是因为我的帖子和回复存储在同一个表中。如果
id
=
属于\u-to\u-id
,则它是一篇发起文章,而如果它不同,则是对另一篇文章的回复

我曾考虑让我的应用程序(Node JS)使用last_insert_id进行快速的
更新
——但这看起来相当混乱,如果可能的话,我希望避免这种情况

下面是我在Oracle中使用的内容—有人知道我如何在MariaDB中复制它吗

CREATE OR REPLACE TRIGGER my_trigger
BEFORE INSERT ON my_table
FOR EACH ROW
BEGIN    
    :new.id := my_sequence.NEXTVAL;
    :new.belongs_to_id := NVL(:new.belongs_to_id,:new.id);
END;
/
这在MariaDb中非常符合

如果将新ID设置为自动递增,则只能使用插入后触发器。差不多

CREATE OR REPLACE TRIGGER my_trigger
AFTER INSERT ON my_table
FOR EACH ROW
v_id NUMBER:
BEGIN    
    v_id := LAST_INSERT_ID();
    :old.belongs_to_id := NVL(:old.belongs_to_id,v_id);
END;
也许只是

插入时
,设置属于
(无
触发器
)。 选择
时,执行
合并(属于\u id,id)


同时,从
顺序
完全切换到
自动增量
(同样没有
触发器
)。

这应该对MariaDb有效,你试过了吗?没有!我以为不会。。。Maria DB了解Oracle PL/SQL吗?谢谢@kevinsky-我已将表设置为自动增量-我可以访问某个对象中的
我的\u序列吗?(请原谅我的无知)@doublesidedstickytape:小心可能发生的错误:
在触发后不允许更新新行。
。非常感谢你们两位-所以应该有一个“买一品脱”按钮:)您知道使用上次插入ID有任何风险吗,如果有多个插入请求,请说?@doublesidedstickytape为什么不提出一个新问题?我对这个答案有一些问题,因为它没有正确编译-我确实得到了一些工作,我发布了一个新问题:
CREATE OR REPLACE TRIGGER my_trigger
AFTER INSERT ON my_table
FOR EACH ROW
v_id NUMBER:
BEGIN    
    v_id := LAST_INSERT_ID();
    :old.belongs_to_id := NVL(:old.belongs_to_id,v_id);
END;