Причем происходит именно усечение, а не удаление связанных строк. Т.е. если вставить в ссылающуюся таблицу среди прочих строку с NULL-значением во внешнем ключе
INSERTINTO Trun_Ref VALUES(1), (2), (NULL);
то она также будет удалена наряду с остальными.
Oracle
В Oracle нет функции для автоинкремента, которую можно указать в определении столбца. Однако поведение автоинкремента можно сымитировать с помощью последовательности (SEQUENCE). Например, подобную ранее рассмотренной таблицу Truncate_test в Oracle можно создать следующим образом:
CREATE SEQUENCE u_seq
START WITH5
INCREMENT BY5;
/
CREATETABLE Truncate_test (id INT PRIMARYKEY, val int);
/
INSERTINTO Truncate_test(id, val)
VALUES(u_seq.NEXTVAL,1);
INSERTINTO Truncate_test(id, val)
VALUES(u_seq.NEXTVAL,2);
INSERTINTO Truncate_test(id, val)
VALUES(u_seq.NEXTVAL,3);
При выполнении оператора TRUNCATE TABLE Truncate_test состояние счетчика (последовательности) не сбрасывается, и нумерация будет продолжена.
Каскадные операции не допускаются, т.е. оператор неприменим, если на таблицу есть ссылка по внешнему ключу.
MySQL
Не поддерживаются опции CONTINUE IDENTITY и RESTART IDENTITY, при этом состояние счетчика (AUTO_INCREMENT) сбрасывается.
Допускаются каскадные операции по аналогичии с оператором DELETE, т.е. если внешний ключ имеет опцию ON DELETE CASCADE, то удаляются только связанные записи. Это значит, что строки с NULL-значением внешнего ключа остаются после выполнения оператора