MySQL Авто прирост первичного ключа увеличивается на 10
На Azure я создал новый экземпляр базы данных MySQL. В этой базе данных я создаю таблицу, используя этот скрипт:
CREATE TABLE ROLES(
ID INTEGER PRIMARY KEY AUTO_INCREMENT,
ROLE_NAME VARCHAR(30) NOT NULL
);
Затем я вставляю значения, используя этот скрипт:
INSERT INTO `beezzy`.`roles` (`ROLE_NAME`) VALUES ('admin');
INSERT INTO `beezzy`.`roles` (`ROLE_NAME`) VALUES ('owner');
INSERT INTO `beezzy`.`roles` (`ROLE_NAME`) VALUES ('consultant');
после выполнения таблица содержит такие строки:
Почему БД генерирует идентификаторы типа "11" и "21"? Я запускаю тот же скрипт на моей локальной машине, и все работает нормально. Идентификаторы были "1", "2", "3"
2 ответа
Пожалуйста, запустите следующий запрос.
SELECT @@auto_increment_increment
Если значение больше 1, тогда установите его на 1
по следующему запросу:
SET @@auto_increment_increment=1;
Примечание. Это изменение отображается только для текущего подключения.
РЕДАКТИРОВАТЬ:
Для того чтобы настроить его глобально, чтобы другие соединения также могли видеть изменения, вам необходимо установить его также для глобального и сеанса.
SET @@GLOBAL.auto_increment_increment = 1;
SET @@SESSION.auto_increment_increment = 1;
Таким образом, другие соединения могут увидеть это изменение сейчас.
Больше:
Это значение будет сброшено, если вы перезапустите MySQL
сервер. Чтобы сделать это изменение постоянным, вам нужно записать эту переменную в [mysqld]
секьон в вашем my.cnf [for linux]
или же my.ini [for windows]
файл.
[mysqld]
auto-increment-increment = 1
Ваш автоинкремент, вероятно, 10, но это, вероятно, по замыслу. Azure использует ClearDB, который использует автоинкремент 10 с причиной, а именно: репликация.
Когда я использую ключи (или последовательности) auto_increment в моей базе данных, они увеличиваются на 10 с различными смещениями. Зачем?
ClearDB использует циклическую репликацию, чтобы обеспечить поддержку мастер-мастер MySQL. Таким образом, некоторые вещи, такие как ключи (или последовательности) auto_increment, должны быть настроены для того, чтобы один мастер не использовал тот же ключ, что и другой, во всех случаях. Мы делаем это, настраивая MySQL для пропуска определенных ключей, и заставляя MySQL использовать определенное смещение для каждого используемого ключа. Причина, по которой мы используем значение 10 вместо 2, - для будущего развития.
Вы не должны изменять значение автоинкремента.