SQL 自增字段
自增字段
Auto-increment 会在新记录插入表中时生成一个唯一的数字。
我们通常希望在每次插入新记录时,自动地创建主键字段的值。
用于 MySQL 的语法
以下SQL语句将"Personid"列定义为"Persons"表中的自动递增主键字段:
CREATE TABLE Persons
(
Personid int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (Personid)
);
MySQL 使用 AUTO_INCREMENT 关键字来执行 auto-increment 任务。
默认地,AUTO_INCREMENT 的开始值是 1,每条新记录递增 1。
要让 AUTO_INCREMENT 序列以其他的值起始,请使用下列 SQL 语法:
ALTER TABLE Persons AUTO_INCREMENT=100;
要在 "Persons" 表中插入新记录,我们不必为 "Personid" 列规定值(会自动添加一个唯一的值):
INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen');
上面的SQL语句将在"Persons"表中插入一条新记录。"Personid"列将被指定一个唯一的值。"FirstName"列将设置为"Lars",而"LastName"列将设置为"Monsen"。
用于 SQL Server 的语法
以下SQL语句将"Personid"列定义为"Persons"表中的自动递增主键字段:
CREATE TABLE Persons
(
Personid int IDENTITY(1,1) PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);
MS SQL 使用 IDENTITY 关键字来执行 auto-increment 任务。
在上面的示例中,IDENTITY的起始值是1,对于每个新记录,它将增加1。
提示: 要指定"Personid"列应从值10开始并递增5,请将其更改为IDENTITY(10,5)。
要在"Persons"表中插入新记录,我们不必为"Personid"列指定值(将自动添加唯一值):
INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen');
上面的SQL语句将在"Persons"表中插入一条新记录。"Personid"列将被指定一个唯一的值。"FirstName"列将设置为"Lars",而"LastName"列将设置为"Monsen"。
用于 Access 的语法
以下SQL语句将"Personid"列定义为"Persons"表中的自动递增主键字段:
CREATE TABLE Persons
(
Personid AUTOINCREMENT PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);
MS Access 使用 AUTOINCREMENT 关键字来执行 auto-increment 任务。
默认情况下,AUTOINCREMENT 的起始值为1,对于每个新记录,它将递增1。
提示: 要指定"Personid"列应从值10开始并递增5,请将autoincrement更改为autoincrement(10,5)。
要在"Persons"表中插入新记录,我们不必为"Personid"列指定值(将自动添加唯一值):
INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen');
上面的SQL语句将在"Persons"表中插入一条新记录。"Personid"列将被指定一个唯一的值。"FirstName"列将设置为"Lars",而"LastName"列将设置为"Monsen"。
用于 Oracle 的语法
在 Oracle 中,代码稍微复杂一点。
您必须通过 sequence 对创建 auto-increment 字段(该对象生成数字序列)。
请使用下面的 CREATE SEQUENCE 语法:
CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10;
上面的代码创建了一个名为seq_person的序列对象,该对象以1开头,将递增1。它还将缓存多达10个性能值。"缓存"选项指定将在内存中存储多少个序列值,以便更快地访问。
要在"Persons"表中插入新记录,我们必须使用nextval函数(此函数从seq_person序列中检索下一个值):
INSERT INTO Persons (Personid,FirstName,LastName)
VALUES (seq_person.nextval,'Lars','Monsen');
上面的SQL语句将在"Persons"表中插入一条新记录。"Personid"列将从seq_person序列中分配下一个编号。"FirstName"列将设置为"Lars",而"LastName"列将设置为"Monsen"。