|
|
|
mysql и transactions
|
|||
|---|---|---|---|
|
#18+
Есть таблица t1 типа CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (id)); в нее нужно добалять записи. И есть таблица t2 типа(max_id CREATE TABLE t2 (max_id INT); которая содержит только одну запись - максимальный id в таблице t1. Структуру таблиц и принцип работы менять нельзя. Задача: написать запрос атомарно добаляющий одну запись в таблицу t1 и изменяющий запись в таблице t2. Что то типа того: BEGIN; INSERT INTO t1 (id) VALUES (null); UPDATE t2 SET max_id=LAST_INSERT_ID(); COMMIT; В случае если проходят две параллельных транзакции, первая выполнила begin/insert, тут полностью отработала вторая и первая выполнила update/commit, то таблица t2 будет содержать не максимальный id. Вопрос как это можно побороть ?!! С LOCK TABLES ничерта не получается, если до begin заблокировать таблицу t2, то такое впечатление что begin снимает блокировку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2005, 17:11:53 |
|
||
|
mysql и transactions
|
|||
|---|---|---|---|
|
#18+
PS: имел ввиду "если до begin заблокировать таблицу t1"... Получается блокировать только в такой последовательности: BEGIN; LOCK TABLES t1 write, t2 write; INSERT INTO t1 (id) VALUES (null); UPDATE t2 SET max_id=LAST_INSERT_ID(); COMMIT; UNLOCK TABLES; Но это imho извращение какое-то :( Кто что скажет ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2005, 17:29:49 |
|
||
|
mysql и transactions
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2005, 18:47:18 |
|
||
|
mysql и transactions
|
|||
|---|---|---|---|
|
#18+
По крайней мере, это более адекватная подпорка, чем блокировать почём зря таблицы в надежде словить дэдлок. Либо вы не объяснили внятно, что вам нужно получить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2005, 18:54:21 |
|
||
|
mysql и transactions
|
|||
|---|---|---|---|
|
#18+
DocAl Код: plaintext 1. Черт ! Как все просто :) Я уже переделал дизайн так что все это вообщем не нужно, однако мне не пришло в голову ваше решение, вот что такое замыленый глаз Спасибо за помощь ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2005, 19:28:24 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=649&tid=1853680]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
53ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 267ms |
| total: | 386ms |

| 0 / 0 |
