我正在尝试将MySQL中的自动递增计数器从+1更改为+43。
例如,我的行的Id = 1、2、3。 但我不希望ID具有+1序列。
我想要他们像43、86、129
我尝试了
ALTER TABLE `table_name` AUTO_INCREMENT=43
但这只是将序列更改为43、44、45
答案 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