Как изменить счетчик автоматического приращения в MySQL с +1 до +43 - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь изменить счетчик автоматического приращения в MySQL с +1 до +43.

Например, мои строки имеют Id = 1, 2, 3. Но я не хочу, чтобы у идентификатора была последовательность +1.

Я хочу их как 43, 86, 129

Я пытался

ALTER TABLE `table_name` AUTO_INCREMENT=43 

Но это только изменило последовательность на 43, 44, 45

Ответы [ 2 ]

3 голосов
/ 25 июня 2019

Необходимо изменить системную переменную auto_increment_offset на требуемое смещение. Но будьте осторожны, используя это решение, так как вы изменяете смещение для всех таблиц (и INSERT команд). Я не рекомендую это решение, лучше использовать другой столбец с пользовательским (рассчитанным) идентификатором:

SET @@session.auto_increment_offset = 43;

INSERT INTO table_name (col1, col2) VALUES ('val1', 'val2')

Вы также можете использовать автоматическое приращение по умолчанию (смещение = 1) и использовать вычисление для получения пользовательского приращения:

SELECT id, id * 43 AS `custom_id`
FROM table_name
0 голосов
/ 25 июня 2019

Ответ из блога Марка С. Расмуссена: https://improve.dk/working-with-identity-column-seed-and-increment-values/

Изменение значения приращения идентификатора

К сожалению, нет простого способа изменить значение приращения идентификатораколонка.Единственный способ сделать это - удалить столбец идентификаторов и добавить новый столбец с новым значением приращения.Следующий код создаст новую временную таблицу, скопирует в нее данные, заново создаст исходную таблицу с правильным значением приращения, а затем, наконец, скопирует данные обратно, используя SET IDENTITY_INSERT ON.aspx), чтобы вставить явные значения в столбец идентификации.

BEGIN TRAN

-- Create new temporary table to hold data while restructuring tblCars
CREATE TABLE tblCars_TMP
(
    CarID int NOT NULL,
    Name nvarchar(50) NOT NULL
)

-- Insert tblCars data into tblCars_TMP
INSERT INTO tblCars_TMP SELECT * FROM tblCars

-- Drop original table
DROP TABLE tblCars

-- Create new tblCars table with correct identity values (1,1) in this case
CREATE TABLE [dbo].[tblCars]
(
    [CarID] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](50) NOT NULL,
)

-- Reinsert data into tblCars table
SET IDENTITY_INSERT tblCars ON
INSERT INTO tblCars (CarID, Name) SELECT CarID, Name FROM tblCars_TMP
SET IDENTITY_INSERT tblCars OFF

COMMIT
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...