我有一张像这样的桌子:
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
尝试#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
我尝试了多种其他方法,但似乎无法使其发挥作用
您不能以这种方式在触发器中使用自动增量列,但您可以使用序列中的默认列:
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 |
+----+-----------------+---------------+