Мой вопрос довольно прост, но ответ может быть сложным.
Я работаю на PHP и хочу вручную управлять уникальным идентификатором для своих объектов. Что сложно, так это управлять атомарностью. Я не хочу, чтобы 2 элемента получили один и тот же идентификатор.
«Элементы» сгруппированы в «Группы». В каждой группе я хочу, чтобы идентификатор элементов начинался с 1 и увеличивался постепенно для каждой вставки в этой группе.
Мое первое решение - иметь столбец «lastID» в таблице «Группы»:
CREATE TABLE groups ( id INT AUTO_INCREMENT, lastId INT )
CREATE TABLE elements ( myId INT, multiple values ...)
Чтобы избежать множества элементов с одинаковым идентификатором, мне нужно обновить lastId и выбрать его в атомарном SQL-запросе.
После этого один получен, у меня есть уникальный идентификатор, который нельзя выбрать снова, и я могу вставить свой элемент.
Мой вопрос в том, как решить жирную часть? Моя база данных — это MySQL с движком MyISAM, поэтому поддержка транзакций не поддерживается.
UPDATE groups
SET lastId = lastId + 1
WHERE id = 42
SELECT lastId
FROM groups
WHERE id = 42
Есть ли что-то более атомарное, чем эти 2 запроса?
Спасибо