📜  SQL 自动增量(1)

📅  最后修改于: 2023-12-03 14:47:38.384000             🧑  作者: Mango

SQL 自动增量

在关系数据库中,自动增量指的是在插入数据时,系统自动为主键列生成一个唯一的、自增的值。这在许多情况下都是非常有用的,例如可以保证了每个新插入的数据都有一个唯一标识符,避免了主键冲突的问题。本文将介绍 SQL 中实现自动增量的方法。

自增列

在 SQL 中,主要有两种方式实现自动增量:使用自增列或者序列。自增列最常用于 MySQL 和 SQL Server 数据库中。在创建表时,可以为一个整数类型的列设置自增属性,系统会自动为这个列生成唯一的值。具体可以按如下的方式创建表:

CREATE TABLE example (
   id INT NOT NULL AUTO_INCREMENT,
   name CHAR(30) NOT NULL,
    PRIMARY KEY (id)
);

这里 id 列被设置为自增列,并作为主键。同时也可以为其它整数类型的列添加自增属性。在插入新记录时,可以省略 id 列:

INSERT INTO example (name) VALUES ('Alice');

系统会自动为 id 列生成一个唯一的值。此时查询表的内容,可以看到自动增长的效果:

SELECT * FROM example;
+----+-------+
| id | name  |
+----+-------+
|  1 | Alice |
+----+-------+

插入更多的记录,系统会为每个插入的记录生成一个新的唯一 id 值。

序列

序列是 Oracle 和 PostgreSQL 中实现自动增量的一种方式。在创建表时,需要使用 CREATE SEQUENCE 语句定义一个序列对象,然后在表定义中引用该对象。例如:

CREATE SEQUENCE example_seq
   START WITH 1
   INCREMENT BY 1
   NO MAXVALUE
   NO CYCLE;

CREATE TABLE example (
   id INT NOT NULL DEFAULT nextval('example_seq'),
   name CHAR(30) NOT NULL,
   PRIMARY KEY (id)
);

这里 id 列被设置为序列生成的默认值,每次插入时系统会自动为 id 列生成一个唯一的值。同时可以在任意表中使用同一个序列对象。

插入新记录的方式与 MySQL 和 SQL Server 中略有不同:

INSERT INTO example (name) VALUES ('Alice') RETURNING id;

需要使用 RETURNING 语句获取生成的 id 值。查询表的内容,可以看到自动增长的效果:

SELECT * FROM example;
+----+-------+
| id | name  |
+----+-------+
|  1 | Alice |
+----+-------+
总结

自动增量是一种非常方便的功能,在很多情况下会很有用,可以避免很多错误。使用自增列或者序列来实现自动增量都是非常简单的,只需要在创建表时指定即可。