powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Манипуляция автоинкрементным полем
9 сообщений из 9, страница 1 из 1
Манипуляция автоинкрементным полем
    #39923300
ambasador
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую участников форума!

Разбираюсь с подходом DDD в веб-разработке, так вот, интересует генерация auto_increment поля для создания сущностей. Если к примеру репозиторий конкретной сущности который инициализируется с PDO инстансом имеет метод ::nextIdentity() который берет текущее значение auto_increment, обновляет инкрементом и возвращает то которое изначально было при выборке.
На основе этого два запроса:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
-- get id into $currentValue variable
SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '<dbname>' AND TABLE_NAME = 'posts';

-- update id with increment $currentValue
ALTER TABLE posts AUTO_INCREMENT = $currentValue + 1; 

-- return $currentValue
...



Какие будут комментарии к этому механизму.
...
Рейтинг: 0 / 0
Манипуляция автоинкрементным полем
    #39923337
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ambasador,

Две параллельно работающие сессии могут получить одинаковый номер. Вас это устраивает?
И почему не хотите использовать стандартную механику автоинкремента?
...
Рейтинг: 0 / 0
Манипуляция автоинкрементным полем
    #39923464
ambasador
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,
авторДве параллельно работающие сессии могут получить одинаковый номер. Вас это устраивает?
Так а транзакции вроде решают этот момент?

авторИ почему не хотите использовать стандартную механику автоинкремента?
Можно здесь поподробнее не совсем понятно, просто инсертить без явного указания id?
...
Рейтинг: 0 / 0
Манипуляция автоинкрементным полем
    #39923486
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ambasador
miksoft,
авторДве параллельно работающие сессии могут получить одинаковый номер. Вас это устраивает?

Так а транзакции вроде решают этот момент?
- ничто не мешает сделать select конкурентно. Они не подерутся.
- вы не запихнёте alter table в транзакцию.
...
Рейтинг: 0 / 0
Манипуляция автоинкрементным полем
    #39923497
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ambasador
транзакции вроде решают этот момент?
Нет. Этот, да ещё в показанном варианте - однозначно нет.
...
Рейтинг: 0 / 0
Манипуляция автоинкрементным полем
    #39923503
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если задача - зарезервировать запись и вернуть её ID - нет ничего проще чем просто вставить пустую запись (заполнив NOT NULL поля, не имеющие дефолтного значения) и получить её ID.
...
Рейтинг: 0 / 0
Манипуляция автоинкрементным полем
    #39923522
ambasador
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Melkijвы не запихнёте alter table в транзакцию
с этим понятно

AkinaЕсли задача - зарезервировать запись и вернуть её ID - нет ничего проще чем просто вставить пустую запись (заполнив NOT NULL поля, не имеющие дефолтного значения) и получить её ID.
А это идея! А как вообще получают id вставленной записи через LAST_INSERT_ID() или через information_schema?
...
Рейтинг: 0 / 0
Манипуляция автоинкрементным полем
    #39923552
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ambasador
как вообще получают id вставленной записи через LAST_INSERT_ID() или через information_schema?
INFORMATION_SCHEMA в этом вопросе - вообще не помощник.
LAST_INSERT_ID() - применим ограниченно, ибо работает только при вставке одной записи, только сразу после вставки, и только в том же соединении (даже если соединение восстановлено - всё, привет...).

Правильный подход такой - ты же знаешь, что именно только что вставил? вот и сделай SELECT с теми же значениями как условиями отбора - получишь свой ID. Причём если надо - сразу для нескольких записей, в любой момент, на пуле соединений, и вообще...
...
Рейтинг: 0 / 0
Манипуляция автоинкрементным полем
    #39923590
ambasador
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ясно, благодарю за развернутый ответ!
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Манипуляция автоинкрементным полем
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]