|
|
|
INSERT с последующей блокировкой строки. InnoDB
|
|||
|---|---|---|---|
|
#18+
Добрый день Есть простая таблица: Код: sql 1. 2. 3. 4. 5. 6. 1)В таблицу нужно добавить (item_id,'any_data') и на добавленную запись сразу же установить блокировку изменения данных(как вариант FOR UPDATE). 2)Одновременно несколько клиентов пытаются добавить те же самые данные. Пробовала так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Как после вставки строки заблокировать добавленную строку строку на запись разблокировав всю таблицу для остальных клиентов? Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2015, 20:44:35 |
|
||
|
INSERT с последующей блокировкой строки. InnoDB
|
|||
|---|---|---|---|
|
#18+
А не проще уникальный ключ создать на те поля, в которые нельзя вставлять одинаковые данные? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2015, 21:41:27 |
|
||
|
INSERT с последующей блокировкой строки. InnoDB
|
|||
|---|---|---|---|
|
#18+
miksoftА не проще уникальный ключ создать на те поля, в которые нельзя вставлять одинаковые данные? Согласен, это делает проверку существования бессмысленной, но после разблокировки таблицы транзакция закомитится и перестанет действовать блокировка Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2015, 23:25:33 |
|
||
|
INSERT с последующей блокировкой строки. InnoDB
|
|||
|---|---|---|---|
|
#18+
Ну так не коммить транзакцию автоматически. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2015, 13:44:23 |
|
||
|
INSERT с последующей блокировкой строки. InnoDB
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Так если разблокировать таблицу с пом Код: sql 1. то текущая транзакция закомитится автоматически ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2015, 17:10:25 |
|
||
|
INSERT с последующей блокировкой строки. InnoDB
|
|||
|---|---|---|---|
|
#18+
Как после вставки строки заблокировать добавленную строку строку на запись разблокировав всю таблицу для остальных клиентов? все проще. После вставки в таблицу Innodb новые записи видны только вставившей транзакции, поэтому нужно просто начать транзакцию, вставить записи, получить их идентификаторы, заблокировать их если надо Select ... for update, обработать данные и завершить транзакцию. "одинаковые" данные нужно отсекать с помощью уникального ключа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 07:21:36 |
|
||
|
INSERT с последующей блокировкой строки. InnoDB
|
|||
|---|---|---|---|
|
#18+
MasterZivКак после вставки строки заблокировать добавленную строку строку на запись разблокировав всю таблицу для остальных клиентов? все проще. После вставки в таблицу Innodb новые записи видны только вставившей транзакции, поэтому нужно просто начать транзакцию, вставить записи, получить их идентификаторы, заблокировать их если надо Select ... for update, обработать данные и завершить транзакцию. "одинаковые" данные нужно отсекать с помощью уникального ключа. или insert for duplication key update если логика такая.... ну скажем идёт вставка данных сразу с нескольких источников(у меня было) и величина должна сумироваться, но не известно есть уже для заданого первичного ключа запись или есчё нету. все делают инсерт + апдейт при дубле ключа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 15:55:59 |
|
||
|
|

start [/forum/topic.php?fid=47&gotonew=1&tid=1832859]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
36ms |
get topic data: |
6ms |
get first new msg: |
3ms |
get forum data: |
1ms |
get page messages: |
25ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 315ms |

| 0 / 0 |
