我的SQL Auto_increment无法用于固定列

问题描述

我正在尝试使用MysqL Workbench创建三个表,其中两列需要以固定的起始值自动递增。我检查了一些在线资源,并弄清楚要使用哪些语句。

create database test;
use test;

/*table Project */
create table Project(
Pnumber INT NOT NULL AUTO_INCREMENT,Pname varchar(30) NOT NULL,Plocation enum ('QLD','VIC','NSW','SA') NOT NULL,primary key(Pnumber)
);

ALTER TABLE Project AUTO_INCREMENT = 7777770;

/*table Department*/
Create table Department(
Dcode varchar(5) NOT NULL,Dname varchar(30),Dmg_ssn varchar(30),primary key(Dcode)
);

/* Table Employee*/
create table Employee(
Ssn INT NOT NULL AUTO_INCREMENT,Ename varchar(30) NOT NULL,Bdate DATE,Address varchar(30),Dcode varchar(5) NOT NULL,Driver_License varchar(30),primary key(Ssn),foreign key(Dcode) references Department(Dcode)
);

ALTER TABLE Employee AUTO_INCREMENT = 1000000;

/* Insert into Project*/
Insert into Project values ('7777770','Star','QLD');
Insert into Project values ('7777771','Innova','NSW');
Insert into Project values ('7777772','Andra',"QLD");

/* Insert into Department */
insert into Department values ('ABC12','Finances','RA12');
insert into Department values ('WXY10','Human Resources','RA12');
insert into Department values ('PBC32','S2','RB13');

/*Insert into Employee */
insert into Employee values ('0000001','Vladimir Rostov','2008-7-04','19 Wilson St','ABC12','1023456');
insert into Employee values ('0000002','Rory Reid','2002-2-10','10 Mary St','WXY10','2365947');
insert into Employee values ('0000003','Andy Murray','2001-5-11','1280 Albert St','5891655');

但是,在创建表之后,仅表Project中的列Pnumber遵循所需的格式,而Employee中的Ssn列则没有。

这是对Employee表的选择:

Ssn,Ename,Bdate,Address,Dcode,Driver_License
1,"Vladimir Rostov",2008-07-04,"19 Wilson St",ABC12,1023456
2,"Rory Reid",2002-02-10,"10 Mary St",WXY10,2365947
3,"Andy Murray",2001-05-11,"1280 Albert St",5891655

知道我在做什么错吗?

解决方法

您的sql脚本具有一个employee表,而不是student,我假设这两个名称引用同一表。我将使用employee名称。

因此,您将employee表的起始值自动增量设置为1000000:

ALTER TABLE Employee AUTO_INCREMENT = 1000000;

但是随后您会使用插入语句将1、2和3明确插入到此列中,因为'0000001'会转换为1。如果您在自动增量中明确插入一个值,并且该值大于给定字段中的最大值,则mysql会将该值原样插入自动增量字段中。

如果您使用的是自动递增,则应该让它起作用,并且不要指定显式值:

/*Insert into Employee */
insert into Employee (Ename,Bdate,Address,Dcode,Driver_License) values ('Vladimir Rostov','2008-7-04','19 Wilson St','ABC12','1023456');
insert into Employee (Ename,Driver_License) values ('Rory Reid','2002-2-10','10 Mary St','WXY10','2365947');
insert into Employee (Ename,Driver_License) values ('Andy Murray','2001-5-11','1280 Albert St','5891655');