从 Oracle 迁移到 MariaDB - 触发器,自引用 table
Migration from Oracle to MariaDB - Trigger, Self-referencing table
我正在将我的 Oracle 数据库迁移到 MariaDB,但我不确定如何在我的 table 之一上创建自引用 ID。
本质上,如果不指定abelongs_to_id
,它会认为它属于自己(并且与生成的ID相同ON INSERT
);但是,如果指定了 belongs_to_id
,那么它将使用它。
我这样做的原因是因为我有 post 和回复存储在同一个 table 中。如果 id
= belongs_to_id
那么它是一个发起 post,而如果它不同,它是对另一个 post.
的回复
我考虑过让我的应用程序 (Node JS) 使用 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;
/
这个should work in MariaDb as it closely conforms to SQL-99 syntax.
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
)。
我正在将我的 Oracle 数据库迁移到 MariaDB,但我不确定如何在我的 table 之一上创建自引用 ID。
本质上,如果不指定abelongs_to_id
,它会认为它属于自己(并且与生成的ID相同ON INSERT
);但是,如果指定了 belongs_to_id
,那么它将使用它。
我这样做的原因是因为我有 post 和回复存储在同一个 table 中。如果 id
= belongs_to_id
那么它是一个发起 post,而如果它不同,它是对另一个 post.
我考虑过让我的应用程序 (Node JS) 使用 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;
/
这个should work in MariaDb as it closely conforms to SQL-99 syntax.
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
)。