MySQL репликация INSERT ... ВЫБРАТЬ с помощью ORDER BY - PullRequest
0 голосов
/ 13 апреля 2011

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

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

1 Ответ

1 голос
/ 13 апреля 2011

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

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

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

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


Эти правила настолько сложны, что я рекомендую просто ВСЕГДА использовать полностью детерминированный ORDER BY для вставки ... select или UPDATE сLIMIT.

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

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