|
Как обезопаситься при конкурентной транзакционной вставке ?
|
|||
---|---|---|---|
#18+
такая задача. Я генерю sql dumb динамически для последующей вставки данных в бд. Каждый раз это касается 3 таблиц. Главная и 2 с foreign key от неё. Что я делаю. Создаю переменную в самом начале и присваиваю ей результат от запроса last insert id. Затем после каждой вставки в эти 3 таблицы делаю @var =@var+1 для последующей подстановки для других запросов для 3 таблиц. Как разрулить правильнее с транзакциями и уровнями изолирования что бы не было такого что 2 транзакции будут писать одинаковый primary key в первую таблицу? PS. Откат на транзакцию делается в php при ошибке какой нибудь ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 02:19 |
|
Как обезопаситься при конкурентной транзакционной вставке ?
|
|||
---|---|---|---|
#18+
Зачем? Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 07:18 |
|
Как обезопаситься при конкурентной транзакционной вставке ?
|
|||
---|---|---|---|
#18+
Для второй таблицы свои значения. Мы туда только Id значение первой таблицы переносим которое было сгенерировано при вставке в первую таблицу. Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Затем тоже самое только без запроса поиска последнего id ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 15:11 |
|
Как обезопаситься при конкурентной транзакционной вставке ?
|
|||
---|---|---|---|
#18+
korumbo1Мы туда только Id значение первой таблицы переносим которое было сгенерировано при вставке в первую таблицу.Правильно. И этот ID мы получаем запросом в первую таблицу по тем значениям, которые мы в неё только что вставили. И это работает во всех случаях, кроме одного - когда таблица допускает полные (кроме поля автоинкремента) дубликаты записей. Опять же - если всё происходит в рамках одного соединения (нет обрывов, и не используется пул), то никто не мешает делать Код: sql 1. 2. 3. 4. 5.
korumbo1 Код: sql 1.
LIMIT-то тут за каким хреном? Кстати, при обрыве соединения посередь процесса получится фигня, и автовосстановление не поможет. Равно как и при использовании пула соединений. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 15:18 |
|
Как обезопаситься при конкурентной транзакционной вставке ?
|
|||
---|---|---|---|
#18+
korumbo1 Код: sql 1.
А это так и вовсе сказка - переменная-то сессионная. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 15:18 |
|
Как обезопаситься при конкурентной транзакционной вставке ?
|
|||
---|---|---|---|
#18+
Akina, Даже все эти вставки в транзакцию закатать то все равно не поможет? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 18:44 |
|
Как обезопаситься при конкурентной транзакционной вставке ?
|
|||
---|---|---|---|
#18+
Akinakorumbo1 Код: sql 1.
А это так и вовсе сказка - переменная-то сессионная. Работаю с framework и там соединение одно единственное на вся работу запроса ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 19:12 |
|
Как обезопаситься при конкурентной транзакционной вставке ?
|
|||
---|---|---|---|
#18+
Akinakorumbo1Мы туда только Id значение первой таблицы переносим которое было сгенерировано при вставке в первую таблицу.Правильно. И этот ID мы получаем запросом в первую таблицу по тем значениям, которые мы в неё только что вставили. И это работает во всех случаях, кроме одного - когда таблица допускает полные (кроме поля автоинкремента) дубликаты записей. Опять же - если всё происходит в рамках одного соединения (нет обрывов, и не используется пул), то никто не мешает делать Код: sql 1. 2. 3. 4. 5.
korumbo1 Код: sql 1.
LIMIT-то тут за каким хреном? Кстати, при обрыве соединения посередь процесса получится фигня, и автовосстановление не поможет. Равно как и при использовании пула соединений. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 21:25 |
|
Как обезопаситься при конкурентной транзакционной вставке ?
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 21:37 |
|
|
start [/forum/topic.php?fid=47&msg=39771154&tid=1829319]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
54ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
others: | 293ms |
total: | 451ms |
0 / 0 |