MySQL Workbench и SEQUEL Pro создают первичный ключ в алфавитном порядке - PullRequest
0 голосов
/ 25 января 2020

Я подключился к своей базе данных с помощью двух программ: MySql Workbench и Sequel Pro (это база данных ClearDB MySQL, размещенная на heroku). Я создал простую таблицу:

CREATE TABLE Country( 
    CountryID int AUTO_INCREMENT NOT NULL, 
    Name varchar(50), 
    PRIMARY KEY(CountryID)
);

, а затем добавил несколько записей:

INSERT INTO Country(Name) VALUES ("Poland");
INSERT INTO Country(Name) VALUES ("Germany");
INSERT INTO Country(Name) VALUES ("Sweden");
INSERT INTO Country(Name) VALUES ("France");

проблема в том, что когда я делаю SELECT * FROM city, я получаю результаты, как показано ниже, где ПЕРВИЧНЫЙ КЛЮЧ автоматически увеличивается в алфавитном / лексикографическом порядке:

1, Poland
21, Germany
31, Sweden
41, France

И я хочу, чтобы ПЕРВИЧНЫЙ КЛЮЧ был 1, 2, 3, 4 et c.

I не могу найти никаких настроек для этого, ни каких-либо сообщений, которые бы подсказывали, почему это происходит. У кого-нибудь есть подсказка?

1 Ответ

2 голосов
/ 25 января 2020

Я не понимаю, что вы подразумеваете под этим:

проблема заключается в том, что при поиске содержимого в этой таблице они создаются с помощью PRIMARY KEY в алфавитном / лексикографическом порядке

Но, исходя из данных примера, ключи назначаются в том порядке, в котором они были введены, что в точности соответствует ожиданиям. Что касается того, почему между значениями ключей есть скачки в десять, то со стороны ClearDB это намеренно:

Когда я использую ключи (или последовательности) auto_increment в моей базе данных, они увеличиваются на 10 с различные смещения. Почему?

ClearDB использует циклическую репликацию для обеспечения поддержки master-master MySQL. Таким образом, некоторые вещи, такие как ключи (или последовательности) auto_increment, должны быть настроены для того, чтобы один мастер не использовал тот же ключ, что и другой, во всех случаях. Мы делаем это, настраивая MySQL для пропуска определенных ключей, и заставляя MySQL использовать заданное c смещение для каждого используемого ключа. Причина, по которой мы используем значение 10 вместо 2, - для будущего развития.

...