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属性分配给列来为主键列生成唯一编号。 (编辑:92站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |