从Oracle到MariaDB的迁移-触发器,自引用表
我正在将Oracle数据库迁移到MariaDB,我不确定如何在我的一个表上创建自引用ID 本质上,如果未指定从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进行快速的更新——但这看起来相当混乱,如果可能的话,
属于\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;