Я понял, что поскольку первичным ключом является varchar, он, очевидно, не может иметь значение null (хотя MySQL Workbench позволяет сбить его с толку в «alter table», которая немедленно возвращается к «». Это и стало причиной проблемы.
Поэтому проверка должна выполняться для блока '' в блоке 'if'.
Я изменил триггер, как показано ниже, и вставка работает, как ожидалось
CREATE DEFINER=`root`@`%` TRIGGER `mydb`.`mytable_BEFORE_INSERT` BEFORE INSERT ON `mytable` FOR EACH ROW
BEGIN
if NEW.pk ='' then
SET NEW.pk = UUID();
end if;
set new.created_at=now();
END
ДОПОЛНИТЕЛЬНЫЙ КОММЕНТАРИЙ:
В качестве темы для обсуждения следует прочитать приведенные выше комментарии Раймонда Нейланда в отношении производительности и дизайна базы данных. Хорошие вещи.