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



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

本质上,如果没有指定belongs_to_id,它将假设它属于自己(并且与ID生成的ON INSERT相同);但是,如果已经指定了belongs_to_id,那么它将使用它。

我这样做的原因是我的帖子和回复存储在同一个表中。如果id=belongs_to_id,那么它是一个发起帖子,而如果它不同,那么它就是对另一个帖子的回复。

我曾想过让我的应用程序(NodeJS)使用last_insert_id快速执行UPDATE,但这似乎相当混乱,如果可能的话,我希望避免这种情况。

以下是我在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中工作,因为它非常符合SQL-99语法。

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;

如果将新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;

也许只是

当为INSERTing时,将belongs_to_id设置为NULL(无TRIGGER)。当SELECTing时,执行COALESCE(belongs_to_id, id)

同时,完全从SEQUENCE切换到AUTO_INCREMENT(再次没有TRIGGER)。

最新更新