mysql基础(14)_列属性之auto_increment

自动增长

自动增长:auto_increment,当给定某个字段该属性之后,该列的数据在没有提供确定数据的时候,系统会根据之前已经存在的数据进行自动增加,填充数据。

通常自动增长用于逻辑主键

自动增长的原理
1、在系统中有维护一组数据,用来保存当前使用了自动增长属性的字段,记住当前对应的数据值,再给定一个指定的步长
2、当用户进行数据插入的时候,如果没有给定值,系统在原始值上再加上步长变成新的数据
3、自动增长的触发,给定属性的字段没有提供值
4、自动增长只适用于数值

使用自动增长
基本语法:在字段之后增加一个属性 auto_increment

mysql> create table auto_incre(
    -> id int primary key auto_increment,
    -> name varchar(10) not null comment '用户名',
    -> password varchar(10) not null comment '密码'
    -> )charset=utf8;
Query OK, 0 rows affected (1.87 sec)

插入数据:null触发自动增长,不能给定具体值

mysql> insert into auto_incre values(null,'jack','123456');
Query OK, 1 row affected (0.35 sec)

mysql> select * from auto_incre;
+----+------+----------+
| id | name | password |
+----+------+----------+
|  1 | jack | 123456   |
+----+------+----------+
1 row in set (0.00 sec)

修改自动增长
1、查看自增长,自增长一旦触发使用之后,会自动的在表选项中增加一个选项,因此一张表最多只能拥有一个自增长。
2、表选项可以通过修改表结构来实现。
alter table 表名 auto_increment =值

mysql> alter table auto_incre auto_increment=9;
Query OK, 1 row affected (1.82 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> show create table auto_incre;
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table      | Create Table                                                                                                                                                                                                                                     |
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| auto_incre | CREATE TABLE `auto_incre` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(10) NOT NULL COMMENT '用户名',
  `password` varchar(10) NOT NULL COMMENT '密码',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 |
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

增加/删除自动增长
删除自增长:就是在字段属性之后不再保留auto_increment,当用户修改自增长所在的字段时,如果没有看到auto_increment属性,系统会自动清除该自增长。
alter table 表名 modify 字段 字段新属性 (切记不要再增加primary key属性,因为查看表的创建语句查看表结构时,主键已被放入额外一行存储)

mysql> alter table auto_incre modify id tinyint;
Query OK, 1 row affected (0.19 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> show create table auto_incre;
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table      | Create Table                                                                                                                                                                                                                                     |
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| auto_incre | CREATE TABLE `auto_incre` (
  `id` tinyint(4) NOT NULL DEFAULT '0',
  `name` varchar(10) NOT NULL COMMENT '用户名',
  `password` varchar(10) NOT NULL COMMENT '密码',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 |
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

初始设置
在系统中有一组变量用来维护自增长的初始值和步长
show variables like 'auto_increment%'

mysql> show variables like 'auto_increment%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| auto_increment_increment | 1     |
| auto_increment_offset    | 1     |
+--------------------------+-------+
2 rows in set (0.00 sec)

auto_increment_increment 步长
auto_increment_offset 初始值

细节问题
1、一张表只有一个自增长,因为自增长会上升到表选项中
2、如果数据插入中没有触发自增长(给定了数据),那么自增长不会表现(虽然自增长没有表现,但是默默根据当前用户设定的值来初始化了下一个值)
3、自增长修改的时候,值可以较大,但是不能比当前已有的自增长字段的值小

mysql> insert into auto_incre values(6,'Lily',13579);
Query OK, 1 row affected (1.60 sec)
mysql> insert into auto_incre values(5,'Tom',246810);
Query OK, 1 row affected (0.00 sec)

mysql> select * from auto_incre;
+----+------+----------+
| id | name | password |
+----+------+----------+
|  1 | jack | 123456   |
|  6 | Lily | 13579    |
|  5 | Tom  | 246810   |
+----+------+----------+
3 rows in set (0.10 sec)
-- 插入的数值比修改的数值(9)小,自增长数值依然是9
mysql> show create table auto_incre;
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table      | Create Table                                                                                                                                                                                                                                     |
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| auto_incre | CREATE TABLE `auto_incre` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(10) NOT NULL COMMENT '用户名',
  `password` varchar(10) NOT NULL COMMENT '密码',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 |
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> insert into auto_incre values(15,'Dary',123123);
Query OK, 1 row affected (0.00 sec)
-- 插入数值大于9,根据用户设定值初始化下一个数值为16
mysql> show create table auto_incre;
+------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table      | Create Table                                                                                                                                                                                                                                      |
+------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| auto_incre | CREATE TABLE `auto_incre` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(10) NOT NULL COMMENT '用户名',
  `password` varchar(10) NOT NULL COMMENT '密码',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 |
+------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> alter table auto_incre auto_increment=12;
Query OK, 4 rows affected (0.51 sec)
Records: 4  Duplicates: 0  Warnings: 0
-- 修改自增长数值时,因为12<16,所以改变不了它的值,依然是16
mysql> show create table auto_incre;
+------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table      | Create Table                                                                                                                                                                                                                                      |
+------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| auto_incre | CREATE TABLE `auto_incre` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(10) NOT NULL COMMENT '用户名',
  `password` varchar(10) NOT NULL COMMENT '密码',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 |
+------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

 


版权声明:本文为no15870678621原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。