|
|
|
Блокировка следующего ключа в InnoDB
|
|||
|---|---|---|---|
|
#18+
Добрый день, господа! Пожалуйста, осветите для меня одну проблему. Есть такой пункт мануала "Блокировка следующего ключа: устранение проблемы с фантомом" ( http://dev.mysql.com/doc/mysql/ru/InnoDB_Next-key_locking.html ). В нём в частности сказано: SELECT * FROM CHILD WHERE ID > 100 FOR UPDATE; Когда InnoDB сканирует индекс, то возможна также блокировка интервалов после последних записей в индексе. Именно это иллюстрируется в предыдущем примере: блокировка, установленная InnoDB, предотвратит вставку в таблицу, если ID будет больше 100. Для меня остались неясными несколько моментов: а) Обязательно ли должен быть индекс по столбцу ID? Если бы на месте ID стояло неиндексированное поле, то никакой блокировки бы не было? б) Чтобы избежать проблемы с фантомом, нужно использовать только SELECT ... FOR UPDATE или можно также SELECT ... LOCK IN SHARE MODE? И ещё вопрос по тому же разделу. В мануале написано, что можно использовать блокировку следующего ключа для обеспечения уникальности значений в своей программе, то есть что можно блокировать "то, чего нет в таблице". Однако, я так и не понял до конца как это делается. Объясните, пожалуйста. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2004, 01:52 |
|
||
|
|

start [/forum/topic.php?fid=47&tid=1855087]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
156ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
21ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 460ms |

| 0 / 0 |
