加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_宿迁站长网 (https://www.0527zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql 拍序列_MySQL 序列

发布时间:2023-01-05 08:00:59 所属栏目:MySql教程 来源:未知
导读: MySQL 序列
简介:在本教程中,我们将向您展示如何使用MySQL序列自动为表列的ID列生成唯一编号。
创建MySQL序列
在MySQL中,序列是按升序生成的整数列表,即1,2,3 ......许多应用程序需要序

MySQL 序列

简介:在本教程中,我们将向您展示如何使用MySQL序列自动为表列的ID列生成唯一编号。

创建MySQL序列

在MySQL中,序列是按升序生成的整数列表,即1,2,3 ......许多应用程序需要序列来生成唯一的数字,主要用于识别,例如CRM中的客户ID,HR中的员工编号和设备编号。服务管理系统。

要自动在MySQL中创建序列,请将AUTO_INCREMENT属性设置为列,列通常是主键列。

使用AUTO_INCREMENT属性时将应用以下规则:

每个表只有一AUTO_INCREMENT列,其数据类型通常是整数。

AUTO_INCREMENT列必须编入索引,这意味着它可以是索引PRIMARY KEY或UNIQUE索引。

AUTO_INCREMENT列必须具有NOT NULL约束。将AUTO_INCREMENT属性设置为列时,MySQL会自动将NOT NULL 约束隐式添加到列中。

创建MySQL序列示例

下面的语句创建一个表名为employees具有emp_no列是AUTO_INCREMENT列:

CREATE TABLE employees (

emp_no INT AUTO_INCREMENT PRIMARY KEY,

first_name VARCHAR(50),

last_name VARCHAR(50)

);

MySQL序列如何工作

AUTO_INCREMENT列具有以下属性:

AUTO_INCREMENT列的起始值为1,当您NULL向列中插入值或在INSERT语句中省略其值时,它会增加1。

要获取最后生成的序列号,请使用LAST_INSERT_ID()函数获取序列号。

如果在表中插入新行并为序列列指定值,则如果列中不存在序列号,则MySQL将插入序列号,如果已存在则发出错误。如果插入一个大于下一个序列号的新值,MySQL将使用新值作为起始序列号,并生成一个大于当前序列号的唯一序列号,以供下次使用。这会在序列中产生间隙。

如果使用UPDATE语句将AUTO_INCREMENT列中的值更新为已存在的值,则如果列具有唯一索引,MySQL将发出重复键错误。如果将AUTO_INCREMENT列更新为大于列中现有值的值,MySQL将使用下一行的最后一个插入序列号的下一个数字。例如,如果最后一个插入序列号为3,则将其更新为10,新行的序列号为4。

如果使用DELETE语句删除最后插入的行,MySQL可能会也可能不会重复使用已删除的序列号,具体取决于表的存储引擎。如果删除一行,MyISAM表不会重复使用已删除的序列号,例如,表中的最后一个插入ID是10,如果删除它,MySQL仍会生成下一个序列号,即新行的序列号为11。与MyISAM表类似,InnoDB表在删除行时不重用序列号。

为列设置 AUTO_INCREMENT 属性后,可以通过各种方式重置自动增量值,例如,使用ALTER TABLE语句。

让我们看一些例子来更好地理解MySQL序列。

首先,在employees表中插入两个新行:

INSERT INTO employees(first_name,last_name)

VALUES('John','Doe'),

('Mary','Jane');

其次,从employees表中选择数据:

SELECT * FROM employees;

+--------+------------+-----------+

| emp_no | first_name | last_name |

+--------+------------+-----------+

| 1 | John | Doe |

| 2 | Mary | Jane |

+--------+------------+-----------+

2 rows in set (0.00 sec)

第三,删除第二名员工,emp_no即2:

DELETE FROM employees

WHERE

emp_no = 2;

mysql> SELECT * FROM employees;

+--------+------------+-----------+

| emp_no | first_name | last_name |

+--------+------------+-----------+

| 1 | John | Doe |

+--------+------------+-----------+

1 row in set (0.00 sec)

第四,插入一名新员工:

INSERT INTO employees(first_name,last_name)

VALUES('Jack','Lee');

mysql> SELECT * FROM employees;

+--------+------------+-----------+

| emp_no | first_name | last_name |

+--------+------------+-----------+

| 1 | John | Doe |

| 3 | Jack | Lee |

+--------+------------+-----------+

2 rows in set (0.00 sec)

因为employees表的存储引擎是InnoDB,所以它不会重用已删除的序列号。新行emp_no 为3。

第五,将emp_no 为3员工更新为1 :

UPDATE employees

SET

first_name = 'Joe',

emp_no = 1

WHERE

emp_no = 3;

MySQL发出主键重复输入错误。

ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

我们来解决它。

UPDATE employees

SET

first_name = 'Joe',

emp_no = 10

WHERE

emp_no = 3;

mysql> select * from employees;

+--------+------------+-----------+

| emp_no | first_name | last_name |

+--------+------------+-----------+

| 1 | John | Doe |

| 10 | Joe | Lee |

+--------+------------+-----------+

2 rows in set (0.00 sec)

第六,在将序列号更新为10后插入新员工:

INSERT INTO employees(first_name,last_name)

VALUES('Wang','Lee');

mysql> select * from employees;

+--------+------------+-----------+

| emp_no | first_name | last_name |

+--------+------------+-----------+

| 1 | John | Doe |

| 4 | Wang | Lee |

| 10 | Joe | Lee |

+--------+------------+-----------+

3 rows in set (0.00 sec)

最后一个插入的下一个序列号是4MySQL 序列使用,因此,MySQL使用4号作为新行而不是11行。

在本教程中,您已经学习了如何使用MySQL序列通过将AUTO_INCREMENT属性分配给列来为主键列生成唯一编号。

(编辑:云计算网_宿迁站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!