Как разрешить этот триггер рекурсивности Mind blow?

Мы получили 3 таблицы: T1, T2, T3, в которые попал только один столбец (a int). И все пусты.
У нас есть 6 триггеров:

T1:

CREATE TRIGGER D1_1
BEFORE INSERT ON T1
FOR EACH ROW WHEN (SELECT COUNT(*) FROM T2) < 1
INSERT INTO T2 VALUES (6);


CREATE TRIGGER D1_2
AFTER INSERT ON T1
FOR EACH ROW WHEN (SELECT COUNT(*) FROM T2) < 2
INSERT INTO T3 VALUES (25);

T2:

CREATE TRIGGER D2_1
BEFORE INSERT ON T2
FOR EACH ROW WHEN (SELECT COUNT(*) FROM T3) < 1
INSERT INTO T3 VALUES (15);


CREATE TRIGGER D2_2
AFTER INSERT ON T2
FOR EACH ROW WHEN (SELECT COUNT(*) FROM T1) < 10
INSERT INTO T1 VALUES (28);

T3:

CREATE TRIGGER D3_1
BEFORE INSERT ON T3
FOR EACH ROW WHEN (SELECT COUNT(*) FROM T2) > 10
INSERT INTO T1 VALUES (21);


CREATE TRIGGER D3_2
AFTER INSERT ON T3
FOR EACH ROW WHEN (SELECT COUNT(*) FROM T3) < 2
INSERT INTO T2 VALUES (32);

Тогда мы делаем :

INSERT INTO T1 VALUES (0);

Какое приложение, в каком порядке вставки?

Но я не знаю приоритет связанных до и после вставки.
Например, я думаю, что начало процедуры :
Перед T1 — > вставить T2 so — > > перед T2 — > > > вставить T3 so — > > > > перед T3 (без условия соответствия) so вставить T2 …?

1 ответ

  1. Порядок выполнения будет следующим:

    insert into T1 values (0)
        trigger d1_1
        T2 has 0 records
        insert into T2 values (6)
            trigger d2_1
            T3 has 0 records
            insert into T3 values (15)
                trigger d3_1
                T2 has 0 records
                15 is now inserted into T3
                trigger d3_2
                T3 has 1 records
                insert into T2 values (32)
                    trigger d2_1
                    T3 has 1 records
                    32 is now inserted into T2
                    trigger d2_2
                    T1 has 0 records
                    insert into T1 values (28)
                        trigger d1_1
                        T2 has 1 records
                        28 is now inserted into T1
                        trigger d1_2
                        T2 has 1 records
                        insert into T3 values (25)
                            trigger d3_1
                            T2 has 1 records
                            25 is now inserted into T3
                            trigger d3_2
                            T3 has 2 records
            6 is now inserted into T2
            trigger d2_2
            T1 has 1 records
            insert into T1 values (28)
                trigger d1_1
                T2 has 2 records
                28 is now inserted into T1
                trigger d1_2
                T2 has 2 records
        0 is now inserted into T1
        trigger d1_2
        T2 has 2 records
    Done.
    

    В конце:

    • T1 имеет 28, 28, 0
    • T2 имеет 32, 6
    • T3 имеет 15, 25