MySQL数据表设计之自动增长
在实际开辟中,偶然需要为数据表中添加的新纪录自动天生主键值。比方在员工数据表中添加员工信息时,假如手动填写员工工号,需要在添加员工前查询工号是否被其他员工占用,由于先查询后添加需要一段时间,有可能会出现并发操纵时工号被其他人抢占的题目,此时可以为员工工号字段设置自动增长。设置自动增长后,假如往该字段插入值时,MySQL会自动天生唯一的自动增长值。通过给字段设置AUTO_INCREMENT即可实现自动增长。
设置自动增长的方式有两种,分别为创建数据表时设置自动增长和修改数据表时添加自动增长。
1.创建数据表时设置自动增长
CREATE TABLE 表名 (
字段名 数据类型 约束 AUTO_INCREMENT,
...
); 2.修改数据表时添加自动增长
# 语法1 MODIFY子句
ALTER TABLE 表名 MODIFY 字段名 数据类型 AUTO_INCREMENT;
# 语法2 CHANGE子句
ALTER TABLE 表名 CHANGE 字段名 字段名 数据类型 AUTO_INCREMENT; 3.利用AUTO_INCREMENT时留意事项如下:
[*]一个数据表中只能有一个字段设置AUTO_INCREMENT,设置AUTO_INCREMENT字段的数据类型应该是整数类型,并且该字段必须设置了唯一约束或主键约束
[*]假如为自动增长字段插入NULL、0、DEFAULT,或在插入数据时省略了自动增长字段,则该字段会利用自动增长值;假如插入的是一个具体的值,则不会利用自动增长值。
[*]默认环境下,设置AUTO_INCREMENT的字段的值会从1开始自增。假如插入了一个大于自动增长值得具体值,则下次插入的自动增长的值会自动利用最大值加1;假如插入的值小于自动增长值,则不会对自动增长值产生影响
[*]利用DELETE语句删除数据时,自动增长值不会减少或填补空缺
[*]在为字段删除自动增长并重新添加自动增长后,自动增长的初始值会自动设置为该列现有的最大值加1
[*]在修改自动增长值时,修改的值若小于该列现有的最大值,则修改不会见效
4.示例
1.创建数据表,设置id字段自动增长
mysql> create table my_auto (
-> id int primary key auto_increment,
-> username varchar(20)
-> );
Query OK, 0 rows affected (0.04 sec)
2.利用DESC语句查看表结构,验证id字段是否成功设置主键和自动增长
mysql> desc my_auto;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| username | varchar(20) | YES | | NULL | |
+----------+-------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)
3.添加数据举行测试,这里省略id字段,并查询结果,从结果可知省略id字段后id字段会利用自动增长值。从1开始
mysql> select * from my_auto;
+----+----------+
| id | username |
+----+----------+
| 1 | a |
+----+----------+
1 row in set (0.00 sec)
4.添加数据举行测试,这里在id字段插入NULL值,从结果得知id字段利用自动增长值
mysql> insert into my_auto values (null,'b');
Query OK, 1 row affected (0.01 sec)
mysql> select * from my_auto;
+----+----------+
| id | username |
+----+----------+
| 1 | a |
| 2 | b |
+----+----------+
2 rows in set (0.00 sec)
5.添加数据时,在id字段插入具体值5,从结果可知id字段的值从5开始自增
mysql> insert into my_auto values (5,'c');
Query OK, 1 row affected (0.01 sec)
mysql> select * from my_auto;
+----+----------+
| id | username |
+----+----------+
| 1 | a |
| 2 | b |
| 5 | c |
+----+----------+
3 rows in set (0.00 sec)
6.添加数据时,在id字段添加0,利用自动增长,从5开始自增,加一变成6
mysql> insert into my_auto values (0,'d');
Query OK, 1 row affected (0.00 sec)
mysql> select * from my_auto;
+----+----------+
| id | username |
+----+----------+
| 1 | a |
| 2 | b |
| 5 | c |
| 6 | d |
+----+----------+
4 rows in set (0.00 sec)
7.添加数据时,在id字段添加DEFAULT值,利用自动增长
mysql> insert into my_auto values (default,'e');
Query OK, 1 row affected (0.01 sec)
mysql> select * from my_auto;
+----+----------+
| id | username |
+----+----------+
| 1 | a |
| 2 | b |
| 5 | c |
| 6 | d |
| 7 | e |
+----+----------+
5 rows in set (0.00 sec)
8.利用SHOW CREATE TABLE语句查看自动增长值,从查询结果可知AUTO_INCREMENT=8表明下次插入的自动增长值为8,若下次插入的指定了大于8的值,此处的8会自动更新为下次插入值加1
mysql> show create table my_auto\G
*************************** 1. row ***************************
Table: my_auto
Create Table: CREATE TABLE `my_auto` (
`id` int NOT NULL AUTO_INCREMENT,
`username` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
9.先修改id的自动增长值为10,然后在删除id字段的自动增长,最后再重新为id字段设置自动增长
mysql> # 删除自动增长
mysql> alter table my_auto modify id int;
Query OK, 5 rows affected (0.06 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> desc my_auto;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| username | varchar(20) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> show create table my_auto\G
*************************** 1. row ***************************
Table: my_auto
Create Table: CREATE TABLE `my_auto` (
`id` int NOT NULL,
`username` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
mysql> # 重新为id字段添加自动增长
mysql> alter table my_auto modify id int auto_increment;
Query OK, 5 rows affected (0.03 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> desc my_auto;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| username | varchar(20) | YES | | NULL | |
+----------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
mysql> show create table my_auto\G
*************************** 1. row ***************************
Table: my_auto
Create Table: CREATE TABLE `my_auto` (
`id` int NOT NULL AUTO_INCREMENT,
`username` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
5.扩展
MySQL中提供了两个用于维护自动增长的系统变量,分别是AUTO_INCREMENT_MENT和AUTO_INCREMENT_OFFEST,前者表示自增长自动从哪个数开始,它的取值范围是1~65535;后者表示自增长字段每次递增的量。默认为1,取值范围是1~65535
若要查看这两个变量的值,可以利用SHOW VARIABLES语句
如:
mysql> show variables like 'auto_inc%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
+--------------------------+-------+
2 rows in set, 1 warning (0.00 sec)
若要改变自动增长的计算方式,可以通过改变这两个变量的值来实现。比方,可以利用
SET @@auto_increment_increment = 10;
将auto_increment_increment的值改为10 ,这里仅介绍如何查看自动增长系统变量的值,关于变量的相关内容将会在数据库编程章节中的函数模块中学习
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]