logo图片
MySql教程
MySql用户管理
MySQL数据库
MySql表格和视图
MySQL查询
MySQL索引
MySQL子句
MySQL授权
MySql控制流
MySQL条件
MySQL连接
MySQL键
MySQL触发器
MySQL聚合函数
MySQL常用
MySQL正则表达式
MySql差异性

MySQL SEQUENCE

MySQL中的序列是按 升序生成的整数的排列(1、2、3等),具体需求。数据库中使用序列来生成唯一编号。许多应用程序要求表的每一行都包含一个不同的值,例如student_table中的学生名册号,HR中的员工号,CRM中的客户ID等。为了实现这种类型的安排,我们使用了提供简单方法的序列生成它们。
MySQL 不提供任何内置功能来为表的行或列创建序列。但是我们可以通过 SQL 查询生成它。在本文中,我们将描述如何使用SQL查询在MySQL中创建序列。

使用AUTO_INCREMENT创建序列

创建序列的最简单方法在 MySQL 中,是通过在表创建期间将列定义为 AUTO_INCREMENT 来实现的,该列应为 "主键" 列。
以下是当我们对列使用AUTO_INCREMENT属性时应考虑的规则:
我们只能在每个表中创建一个AUTO_INCREMENT列,并且该列的数据类型是整数。 AUTO_INCREMENT列也应具有PRIMARY索引或UNIQUE KEY索引。 AUTO_INCREMENT列必须包含 NOT NULL 。但是,当我们将列设置为AUTO_INCREMENT属性时,MySQL会自动向该列隐式添加NOT NULL约束。
示例:
让我们在以下示例的帮助下理解它。首先,我们需要创建一个新表,并确保有一列具有AUTO_INCREMENT属性,并且该列也作为PRIMARY KEY。
执行以下查询以创建表:
mysql> CREATE TABLE Insects (
   Id int UNSIGNED NOT null AUTO_INCREMENT,
   PRIMARY KEY (id),
   Name VARCHAR(30) NOT null, 
   Type VARCHAR(30) NOT null,
   Origin VARCHAR(30) NOT null 
);
接下来,我们将在此表中插入几行,由于MySQL自动将其递增,因此无需为每行提供ID。
mysql> INSERT INTO Insects (Name, Type, Origin) VALUES
    ('Cockroach', 'Crawling', 'Kitchen'),
    ('Mosquito', 'Flying', 'Driveway'),
    ('Spider' ,'Crawling', 'Court yard'),
    ('Grasshopper', 'Flying', 'Front yard');
现在执行 SELECT语句来验证记录:
mysql> SELECT * FROM Insects;
我们可以在下面的图像中查看结果。
MySQL SEQUENCE
在上面的图像中,我们使用PRIMARY KEY和AUTO_INCREMENT选项定义了Id列,该列会自动递增此列并始终在其中存储唯一值。
执行 INSERT查询 ,我们不提供ID列的值,但MySQL会自动为其生成一个序列。

MySQL Sequence的工作原理?

MySQL中的AUTO_INCREMENT列包含以下属性:
AUTO_INCREMENT列的起始值为1。当我们在INSERT语句中省略其值或插入NULL时,此列始终增加1。 我们可以使用 LAST_INSERT_ID()函数来获取最后生成的序列号。但是,我们也可以为后续语句使用最后一个插入ID,这些ID在各个会话之间应该是唯一的。 如果我们要在表中插入新行并为sequence列指定一个值,那么MySQL首先会检查它是否已经存在指定的值。如果不存在,它将在序列中插入序列号;否则,发出错误。同样,如果我们插入一个大于下一个序列号的值,MySQL将使用它作为起始序列号。现在,MySQL将根据当前序列号生成下一个序列值。请注意,这将在我们的序列中造成缺口。 如果我们使用 UPDATE 语句更新AUTO_INCREMENT列的值,则MySQL仅在存储唯一值的情况下才会发出重复键错误。如果我们使用大于现有值的值更新AUTO_INCREMENT列,则MySQL将为下一行插入最后一个序列号的下一个值。例如,AUTO_INCREMENT列的最后一个序列值为3,我们想将其更新为10,那么下一行的序列号应为4、 如果我们要使用 DELETE 语句删除最后插入的行,则MySQL不必再次重用已删除的序列号,因为它取决于表的存储引擎。例如,如果我们使用 MyISAM 表并删除最后一个插入ID 5,则MySQL仍将新行的下一个序列号插入为6、
让我们看看更多示例,以更好地理解MySQL序列的使用。
在表中插入两个新记录。
mysql> INSERT INTO Insects (Id, Name, Type, Origin) VALUES
(6, 'Bee', 'Flying', 'Court yard'),
(7, 'Ant', 'Crawling', 'Front yard');
并执行SELECT语句以验证输出:
MySQL SEQUENCE
接下来,我们将使用以下查询 删除ID为6的昆虫:
mysql> DELETE FROM Insects WHERE Id = 6;
同样,我们将使用以下语句在表中插入新行:
mysql> INSERT INTO Insects (Name, Type, Origin) VALUES
('Cricket', 'Crawling', 'Front yard');
我们将再次执行SELECT语句以查看输出:
MySQL SEQUENCE
在上图,我们可以看到MySQL不会重复使用已删除的序列号。这是因为Insects表的存储引擎是 InnoDB 。因此,插入查询将在Insects表中将新序列添加为8、
现在,我们将把 Id为3的现有昆虫更新为Id = 2:
mysql> UPDATE Insects SET Name = 'Bee', Id = 2 WHERE Id = 3;
MySQL发出错误: 键" insects.PRIMARY"列的条目" 2"重复。。修复
mysql> UPDATE Insects SET Name = 'Bee', Id = 5 WHERE Id = 3;
请参见下图。
MySQL SEQUENCE
昵称: 邮箱:
Copyright © 2020 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4