mysql 从1000开始自动递增2

50pmv0ei  于 2023-04-19  发布在  Mysql
关注(0)|答案(4)|浏览(167)

我使用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'))
);

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

t1rydlwq

t1rydlwq1#

您可以按以下方式执行此操作:

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的记录。

dgtucam1

dgtucam12#

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
tcomlyy6

tcomlyy63#

您可以使用table选项从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设置为会话变量,然后在插入到另一个表之前将其设置回默认值。这听起来很容易出错,因为你可能忘记更改会话变量。

bfhwhh0e

bfhwhh0e4#

你可以试试这个解决方案:

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开始设置起始值,可能需要在Create Table语法的末尾设置AUTO_INCREMENT

相关问题