Допустим, у нас есть (InnoDB) таблица associations
в базе данных MySQL, которая имеет следующую структуру:
CREATE TABLE `associations` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fk_id_1` int(11) NOT NULL,
`fk_id_2` int(11) NOT NULL,
`fk_id_3` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `some_unique_constraint` (`fk_id_1`,`fk_id_2`),
KEY `fk_id_2_INDEX` (`fk_id_2`),
KEY `fk_id_3_INDEX` (`fk_id_3`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin$$
В столбце id
есть скачков (Я знаю, что это проблема того, как генерируется автоинкрементное значение, в то время как несколько потоков пытаются получить его).Поскольку ни одна другая таблица не использует столбец id
в качестве ссылки, я планирую удалить столбец id
и создать его снова, надеюсь, что счетные дыры исчезнут.Я сделал резервную копию своей базы данных и проверил это.Результат был немного запутанным.Порядок строк, казалось, изменился.Если я не ошибаюсь, сначала порядок будет fk_id_1
, затем fk_id_2
, затем fk_id_3
.
. Это естественный порядок, в котором MySQL устанавливает таблицу, когда присваивает строкам новый сгенерированный ключ автоинкремента??
Есть ли еще что мне знать, что произошло во время этого процесса?
Причина, по которой я должен знать об этом, заключается в том, что мне нужно сделать столбец id
полезным для другогозадание, которое я намерен выполнить там, где пробелы не нужны.