А зачем эти извращения? Есть гарантированно конкурентно-безопасный LAST_INSERT_ID()
У вас insert ignore используется. Значит, данные натыкаются на уникальные индексы?
Если вы хотите "без пропусков" - вы взяли не тот инструмент.
CREATE FUNCTION insert_t1 (_link char(36)) RETURNS INT UNSIGNED
BEGIN
DECLARE _id INT UNSIGNED;
INSERT IGNORE INTO t1(link) VALUE(_link);
SELECT id FROM t1 INTO _id WHERE link = _link;
RETURN _id;
END
А, кажется понял. Вы хотите создать внешний ключ, но не создавать под него индекс?
А такое вообще возможно?
Какая разница, есть там пропуски, или не
Все данные из приложения записались в базу без ошибки, вот только половина с первого раза, а другая половина ровно при втором вызове функции...