SQL - 使用序列:初学者指南

你好,未来的数据库大师们!今天,我们将踏上一段激动人心的旅程,探索 SQL 序列的世界。如果你是编程新手,不用担心——我将作为你友好的向导,我们会一步一步地学习。在本教程结束时,你将能够像专业人士一样创建和操作序列!

SQL - Using Sequences

序列是什么?

在我们开始之前,让我们先了解序列是什么。想象你在给一本书的页面编号。你从1开始,然后是2、3,以此类推。这在 SQL 中,序列所做的基本上就是这样——它自动生成一系列数字。当你在数据库表中为行分配唯一标识符时,这非常有用。

现在,让我们探讨不同数据库系统中序列是如何工作的。

MySQL中的序列

MySQL,最受欢迎的数据库系统之一,处理序列的方式略有不同。它没有像某些其他数据库那样的专用 SEQUENCE 对象。相反,它使用 AUTO_INCREMENT。让我们看看这是如何工作的!

创建带有AUTO_INCREMENT的表

CREATE TABLE students (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
grade INT
);

在这个例子中,我们创建了一个名为 students 的表。id 列被设置为 AUTO_INCREMENT,这意味着 MySQL 将自动为每条新插入的记录生成一个唯一的数字。

让我们插入一些数据,看看会发生什么:

INSERT INTO students (name, grade) VALUES ('Alice', 95);
INSERT INTO students (name, grade) VALUES ('Bob', 87);
INSERT INTO students (name, grade) VALUES ('Charlie', 92);

现在,如果我们从表中选取所有行:

SELECT * FROM students;

我们将看到如下内容:

id name grade
1 Alice 95
2 Bob 87
3 Charlie 92

如你所见,MySQL 自动为每行分配了唯一的 id 值。这就像有一个乐于助人的图书管理员在为你编号书籍!

在MySQL中将序列从一个特定值开始

有时,你可能希望从特定的数字开始你的序列。也许你正在从旧系统迁移数据,并希望从上次停止的地方继续。MySQL 允许我们这样做!

修改AUTO_INCREMENT值

ALTER TABLE students AUTO_INCREMENT = 1000;

这个命令告诉 MySQL,让我们的 students 表的 AUTO_INCREMENT 值从1000开始。让我们插入一个新学生,看看会发生什么:

INSERT INTO students (name, grade) VALUES ('David', 88);
SELECT * FROM students;

现在我们的表看起来像这样:

id name grade
1 Alice 95
2 Bob 87
3 Charlie 92
1000 David 88

David 得到了 id 1000,而我们添加的任何新学生将得到 1001、1002,依此类推。就像在我们的书中开始了一个新的章节!

SQL Server中的序列

现在,让我们换个方向,看看 SQL Server 中序列是如何工作的。与 MySQL 不同,SQL Server 有一个专用的 SEQUENCE 对象。就像在数据库中有一个特别的数字生成器!

创建序列

以下是如何在 SQL Server 中创建序列:

CREATE SEQUENCE student_id_seq
AS INT
START WITH 1
INCREMENT BY 1;

这创建了一个名为 student_id_seq 的序列,从1开始,每次使用时增加1。

使用序列

要使用我们的新序列,我们可以这样做:

CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50),
grade INT
);

INSERT INTO students (id, name, grade)
VALUES (NEXT VALUE FOR student_id_seq, 'Alice', 95);

INSERT INTO students (id, name, grade)
VALUES (NEXT VALUE FOR student_id_seq, 'Bob', 87);

如果我们现在从表中选取数据:

SELECT * FROM students;

我们将看到:

id name grade
1 Alice 95
2 Bob 87

NEXT VALUE FOR 子句告诉 SQL Server 使用序列中的下一个值。

修改序列

我们也可以在创建序列后对其进行修改。例如,要从不同的数字开始:

ALTER SEQUENCE student_id_seq
RESTART WITH 1000;

现在,如果我们插入一个新学生:

INSERT INTO students (id, name, grade)
VALUES (NEXT VALUE FOR student_id_seq, 'Charlie', 92);

SELECT * FROM students;

我们将看到:

id name grade
1 Alice 95
2 Bob 87
1000 Charlie 92

就像我们在编号系统中跳过了一段!

结论

就这样,大家!我们一起穿越了 SQL 序列的土地,探索了它们在 MySQL 和 SQL Server 中是如何工作的。记住,序列就像你的私人编号助手,帮助你组织数据并保持其唯一性。

无论你使用 MySQL 的 AUTO_INCREMENT 还是 SQL Server 的 SEQUENCE 对象,核心思想都是一样的——自动生成唯一数字,使数据库管理更加简单。

在你继续你的 SQL 冒险之旅时,你会发现序列在许多情况下都非常有用。它们非常适合创建主键、跟踪订单或任何需要一系列唯一数字的场景。

继续练习,保持好奇心,很快你就能像经验丰富的数据库DJ一样序列化数据!快乐编码,愿你的查询总是返回你期望的结果!

Credits: Image by storyset