MySQL репликация ВСТАВКИ… ВЫБЕРИТЕ с ПОРЯДКОМ ПО

#mysql #replication #sql-order-by #insert-select

#mysql #репликация #sql-order-by #вставить-выбрать

Вопрос:

Страница документации для INSERT … В SELECT указано, что для INSERT ... SELECT работы с репликацией необходимо использовать ORDER BY некоторый столбец, чтобы строки могли вставляться в предсказуемом порядке, поэтому столбцы с автоматическим увеличением будут функционировать правильно.

Это заставляет меня задуматься… когда вы выполняете ORDER BY и выбранный вами столбец не является уникальным, что MySQL использует для определения дальнейшего порядка? Она должна быть детерминированной, иначе в документации было бы сказано, что вам нужно выбрать ORDER BY уникальный столбец, да? Или документация неверна?

Ответ №1:

Если вы используете ORDER BY со столбцом, который не имеет различных значений для всех сопоставленных строк, порядок не определен, да.

Это нарушает репликацию на основе инструкций, ЕСЛИ порядок вставки имеет значение. Порядок вставки, безусловно, имеет значение, если вы используете столбец auto_increment в целевой таблице, но часто не имеет значения в противном случае.

Порядок также имеет значение, если у вас есть ОГРАНИЧЕНИЕ на инструкцию (обновление и удаление тоже).

Однако, если вы используете репликацию на основе строк, вы можете делать практически все, что вам нравится, и не прерывать репликацию. По крайней мере, если вы действительно не попробуете.


Эти правила настолько сложны, что я рекомендую вам ВСЕГДА использовать полностью определенный ПОРЯДОК ПО для insert … select или ОБНОВЛЕНИЕ с ОГРАНИЧЕНИЕМ.

Репликация на основе строк также является вашим другом. На самом деле я не часто использовал это в производстве, но понимаю, что

  • Это больше похоже на то, как работает репликация в других базах данных
  • Большую часть времени это просто работает.