当层次列为主键值为空时更新它们

问题描述 投票:0回答:1

我有一张像这样的桌子:

id 家长ID 根ID
1 1 1
2 2 2

当我插入一个将成为根的新行(例如parentId和rootId = id)时,我需要一个触发器来使用“id”值(自动增量主键)更新parentId和rootId

但是,我似乎无法使用 AFTER INSERT 触发器更新插入的行,并且似乎无法使用 BEFORE INSERT 触发器引用 ID 的值。

我正在使用 10.6.16-MariaDB-log

  • 我的PHP

尝试#1 结果:“AFTER 触发器中不允许更新新行”

CREATE TRIGGER xxx AFTER INSERT ON TBL_COMMENTS
FOR EACH ROW
BEGIN
    IF NEW.parentCommentId IS NULL THEN 
       SET NEW.parentCommentId = NEW.id, NEW.rootCommentId = NEW.id;
    END IF;
END

尝试#2 结果:没有错误,但父/根密钥未更新

CREATE TRIGGER xxx BEFORE INSERT ON TBL_COMMENTS
FOR EACH ROW
BEGIN
    IF NEW.parentCommentId IS NULL THEN 
       SET NEW.parentCommentId = NEW.id, NEW.rootCommentId = NEW.id;
    END IF;
END

我尝试了多种其他方法,但似乎无法使其发挥作用

mariadb appian mariadb-10.6
1个回答
0
投票

您不能以这种方式在触发器中使用自动增量列,但您可以使用序列中的默认列:

create sequence TBL_COMMENTS_id;
create table TBL_COMMENTS (id int not null default nextval(TBL_COMMENTS_id) primary key, parentCommentId int, rootCommentId int);
delimiter $$
CREATE TRIGGER xxx BEFORE INSERT ON TBL_COMMENTS
FOR EACH ROW
BEGIN
    IF NEW.parentCommentId IS NULL THEN 
       SET NEW.parentCommentId = NEW.id, NEW.rootCommentId = NEW.id;
    END IF;
END
$$
delimiter ;
insert into TBL_COMMENTS () values ();
select * from TBL_COMMENTS;

+----+-----------------+---------------+
| id | parentCommentId | rootCommentId |
+----+-----------------+---------------+
|  1 |               1 |             1 |
+----+-----------------+---------------+
© www.soinside.com 2019 - 2024. All rights reserved.