如何在MySQL中将自动递增计数器从+1更改为+43

时间:2019-06-25 10:17:53

标签: mysql sql

我正在尝试将MySQL中的自动递增计数器从+1更改为+43。

例如,我的行的Id = 1、2、3。 但我不希望ID具有+1序列。

我想要他们像43、86、129

我尝试了

ALTER TABLE `table_name` AUTO_INCREMENT=43 

但这只是将序列更改为43、44、45

2 个答案:

答案 0 :(得分:3)

您必须将系统变量auto_increment_offset更改为所需的偏移量。但是请谨慎使用此解决方案,因为您更改了所有表的偏移量(和INSERT命令)。我不建议使用此解决方案,最好使用另一列具有自定义(计算得出的)ID的列:

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

答案 1 :(得分:0)

Mark S. Rasmussen的博客的答案:https://improve.dk/working-with-identity-column-seed-and-increment-values/

更改身份增量值

很遗憾,没有简单的方法来更改标识列的增量值。唯一的方法是删除标识列,并使用新的增量值添加新列。下面的代码将创建一个新的临时表,将数据复制到其中,使用正确的增量值重新创建原始表,然后最后使用SET IDENTITY_INSERT ON.aspx将数据复制回去,以在identity列中插入显式值。

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