mysql 从1000开始自动递增2

wi3ka0sx  于 2022-12-26  发布在  Mysql
关注(0)|答案(4)|浏览(185)

我正在用mysql做一个表格

CREATE TABLE school.student(
    Std_id INT NOT NULL AUTO_INCREMENT,
    Std_name CHAR(40) NOT NULL,
    Std_Birth DATE,
    Std_Group CHAR(2) check(Std_Group in ('G1', 'G2','G3','G4'))
);

并且我尝试在使用CREATE时使自动增量从1000开始并按2(1000,1002,1004,1006 .....)递增

yc0p9oo0

yc0p9oo01#

你可以试试这个办法。

CREATE TABLE school.student(
    Std_id INT NOT NULL AUTO_INCREMENT,
    Std_name CHAR(40) NOT NULL,
    Std_Birth DATE,
    Std_Group CHAR(2) check(Std_Group in ('G1', 'G2','G3','G4'))
) AUTO_INCREMENT = 1000;

set @@auto_increment_increment=2;
  • 同时,你设置了**@@auto_increment_increment**的值,它将影响整个数据库。因为,它是MySQL的全局变量。
  • 要从1000开始设置起始值,您可能需要设置
    AUTO_INCREMENT位于创建表格语法的末尾。
llmtgqce

llmtgqce2#

您可以按以下步骤操作:

INSERT INTO _students
(Std_id, Std_name, Std_Birth, Std_Group)
select case when count(Std_id) >= 1 then max(Std_id) + 2 else 1000 end as Std_id, 'test', '2022-10-10', 'G1'
from _students;

select case when count(Std_id) >= 1 then max(Std_id) + 2 else 1000 end:这将检查您的表中是否有任何记录,如果没有,它将首先插入id为1000的记录

41zrol4v

41zrol4v3#

Create table #autoincre
(
    Std_id int not null Primary key identity (1000,2),
    Std_name char(40) Not null,
    Std_Birth date,
    Std_Group char(2) check(Std_group in ('G1','G2','G3','G4'))
)

Drop table #autoincre

insert into #autoincre values('Ajay','2022-07-10','G1')

select * from #autoincre
mhd8tkvw

mhd8tkvw4#

可以使用表选项从1000开始为给定表执行auto_increment:

CREATE TABLE school.student(
 ...
) AUTO_INCREMENT=1000;

请注意,下一个生成的id将比表选项设置的值大1,因此它将生成值1001。如果希望它包含值1000,请设置表选项AUTO_INCREMENT=999
你的另一个要求更难。
https://dev.mysql.com/doc/refman/8.0/en/replication-options-source.html#sysvar_auto_increment_increment :
不可能将这两个变量的影响限制在一个表中;这些变量控制MySQL服务器上 all 表中所有AUTO_INCREMENT列的行为。
换句话说,如果设置了auto_increment_increment=2,这将应用于所有包含自动增量列的表,而不是每个表的选项。
可以只在插入到student表之前将auto_increment_increment=2设置为会话变量,然后在插入到另一个表之前将其设置回默认值,这听起来很容易出错,因为您可能忘记更改会话变量。

相关问题