Есть таблица
CREATE TABLE t1(
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
link CHAR(36) NOT NULL UNIQUE
);
Внешнее приложение (1С:Предприятие) пишет в эту таблицу через функцию:
CREATE FUNCTION insert_t1 (_link char(36)) RETURNS INT UNSIGNED
BEGIN
INSERT INTO t1(link) VALUE(_link);
RETURN LAST_INSERT_ID();
END
Эта функция возвращает сгенерированный id. Проблема в том, что иногда случается так, что запись в таблицу делается, а приложение не получает обратно сгенерированный id. В итоге, приложение пытается повторно сделать запись, из-за чего возникает ошибка из-за дубля уникального ключа.
Как избежать таких неприятностей? С помощью транзакции? Но, как я понимаю, она тут не поможет. Возвращаемый id после успешного выполнения транзакции может потеряться где-нибудь в сети и не дойти до приложения. Или я ошибаюсь?