SELECT с блокировкой FOR UPDATE

295
12 января 2017, 05:05

Имеется запрос такого вида:

SELECT `id` FROM `table`
WHERE `index1` = :index1
  AND `index2` = :index2
  AND `index3` = :index3
  AND `index4` = :index4
FOR UPDATE

.. где id - это первичный ключ, а indexN - это колонки с индексами.

Далее, на основании существования id должна производиться либо вставка новой строки INSERT, либо её обновление UPDATE.

Первый вопрос: будут ли операцией FOR UPDATE заблокированы на изменение другие строки, в которых часть индексов indexN будет совпадать по значению, указанному в WHERE?

И второй вопрос: является ли операция INSERT ON DUPLICATE KEY UPDATE эффективнее обозначенной выше, если предполагается, что INSERT - единовременная, тогда как последующих UPDATE - будет подавляющее большинство?

Answer 1

Вопрос 1: Нет. Блокируются только отобранные записи.

Вопрос 2: Да, несомненно.

READ ALSO
Entity Framework и большая база данных Mysql

Entity Framework и большая база данных Mysql

Делаю приложение, которое работает server side и показывает таблицу со 120000 книгами

422
Сортировка коллекции. Интерфейс Comparator

Сортировка коллекции. Интерфейс Comparator

Возникла необходимость избавиться от второго метода сравнения compareоднако после его удаления программа не компилируетсяПодскажите в чем...

265
Клиент-серверная архитектура Android [требует правки]

Клиент-серверная архитектура Android [требует правки]

Мне нужно построить клиент-серверную архитектуруКлиентом выступает Android приложение, однако в будущем планируется и создание web-страницы...

252
Анимация setVisibility GONE/VISIBLE

Анимация setVisibility GONE/VISIBLE

Как сделать, чтобы при скрытии нескольких View-элементов, находящихся рядом в LinearLayout было так:

286