Предположим, что у нас есть таблица со следующей схемой:
CREATE TABLE Persons (
sid int NOT NULL AUTO_INCREMENT,
groupName varchar(255) NOT NULL,
userIdInGroup int,
PRIMARY KEY (sid));
Мы хотим назначить каждому новому пользователю в той же группе автоматическое увеличение userId на основе последнего userId группы, т.е.хочу эмулировать автоматически увеличивающийся userId в каждой группе.
Поскольку мы вставляем новый userId с учетом MAX (userIdInGroup), нам нужно обернуть select и вставить в транзакцию.Примерно так:
START TRANSACTION
SET @a = (SELECT MAX(userIdInGroup) FROM Persons WHERE groupName= 'Foo') +1;
INSERT THE NEW ROW USING userIdInGroup = @a
COMMIT
- Просто выбираете MAX в безопасной транзакции или нам нужно что-то заблокировать с помощью SELECT FOR UPDATE?
- Есть ли способ обойти транзакцию и до сих порбыть последовательным?