|
Манипуляция автоинкрементным полем
|
|||
---|---|---|---|
#18+
Приветствую участников форума! Разбираюсь с подходом DDD в веб-разработке, так вот, интересует генерация auto_increment поля для создания сущностей. Если к примеру репозиторий конкретной сущности который инициализируется с PDO инстансом имеет метод ::nextIdentity() который берет текущее значение auto_increment, обновляет инкрементом и возвращает то которое изначально было при выборке. На основе этого два запроса: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
Какие будут комментарии к этому механизму. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2020, 12:05 |
|
Манипуляция автоинкрементным полем
|
|||
---|---|---|---|
#18+
ambasador, Две параллельно работающие сессии могут получить одинаковый номер. Вас это устраивает? И почему не хотите использовать стандартную механику автоинкремента? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2020, 12:47 |
|
Манипуляция автоинкрементным полем
|
|||
---|---|---|---|
#18+
miksoft, авторДве параллельно работающие сессии могут получить одинаковый номер. Вас это устраивает? Так а транзакции вроде решают этот момент? авторИ почему не хотите использовать стандартную механику автоинкремента? Можно здесь поподробнее не совсем понятно, просто инсертить без явного указания id? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2020, 15:07 |
|
Манипуляция автоинкрементным полем
|
|||
---|---|---|---|
#18+
ambasador miksoft, авторДве параллельно работающие сессии могут получить одинаковый номер. Вас это устраивает? Так а транзакции вроде решают этот момент? - ничто не мешает сделать select конкурентно. Они не подерутся. - вы не запихнёте alter table в транзакцию. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2020, 15:28 |
|
Манипуляция автоинкрементным полем
|
|||
---|---|---|---|
#18+
ambasador транзакции вроде решают этот момент? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2020, 15:42 |
|
Манипуляция автоинкрементным полем
|
|||
---|---|---|---|
#18+
Если задача - зарезервировать запись и вернуть её ID - нет ничего проще чем просто вставить пустую запись (заполнив NOT NULL поля, не имеющие дефолтного значения) и получить её ID. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2020, 15:44 |
|
Манипуляция автоинкрементным полем
|
|||
---|---|---|---|
#18+
Melkijвы не запихнёте alter table в транзакцию с этим понятно AkinaЕсли задача - зарезервировать запись и вернуть её ID - нет ничего проще чем просто вставить пустую запись (заполнив NOT NULL поля, не имеющие дефолтного значения) и получить её ID. А это идея! А как вообще получают id вставленной записи через LAST_INSERT_ID() или через information_schema? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2020, 16:11 |
|
Манипуляция автоинкрементным полем
|
|||
---|---|---|---|
#18+
ambasador как вообще получают id вставленной записи через LAST_INSERT_ID() или через information_schema? LAST_INSERT_ID() - применим ограниченно, ибо работает только при вставке одной записи, только сразу после вставки, и только в том же соединении (даже если соединение восстановлено - всё, привет...). Правильный подход такой - ты же знаешь, что именно только что вставил? вот и сделай SELECT с теми же значениями как условиями отбора - получишь свой ID. Причём если надо - сразу для нескольких записей, в любой момент, на пуле соединений, и вообще... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2020, 16:53 |
|
|
start [/forum/topic.php?fid=47&msg=39923464&tid=1828755]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
106ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 200ms |
0 / 0 |