列属性——自动增长

自动增长

自动增长:auto_increment当对应的字段,不给值,或者是默认值,或者是null的时候,就会自动的被系统触发,系统会从当前字段中取已有的最大值再进行+1操作,得到新的字段值

自增长通过跟主键进行搭配使用,其特点为:

  • 任何字段要做自增长,前提其本身必须是一个索引,即key栏有值;
  • 自增长字段必须是数字(整型);
  • 每张表最多有一个自增长字段。
mysql> create table my_auto(
    ->  id int primary key auto_increment,
    ->  name varchar(20) not null
    -> )charset utf8;
Query OK, 0 rows affected

mysql> desc my_auto;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | NO   |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
2 rows in set

使用自增长

当自增长给定的值为null或者默认值的时候,就是触发自动增长。

mysql> insert into my_auto (name) values ('Charies');
Query OK, 1 row affected

mysql> insert into my_auto values(null,'Guo');
Query OK, 1 row affected

mysql> insert into my_auto values(default,'Gong');
Query OK, 1 row affected

mysql> select * from my_auto;
+----+---------+
| id | name    |
+----+---------+
|  1 | Charies |
|  2 | Guo     |
|  3 | Gong    |
+----+---------+
3 rows in set

如上图所示,自增长的第一个元素默认是1,自增长每次都是自增1。此外,如果自增长对应的字段输入了值,那么自增长失效,但是下一次还是能够正确的自增长,即从取该字段的最大值+1.

如何确定自动增长的值??

mysql> show create table my_auto;
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table                                                                                                                                                           |
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| my_auto | CREATE TABLE `my_auto` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 |
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set

如上图所示,显然在咱们之前插入的 3 条记录之后,下一次自增长是4

修改自增长

自增长如果是涉及到字段改变,就必须先删除自增长,然后再增加自增长,因为每张表只能有一个自增长字段。

如果修改当前自增长字段已经存在的值,则只能修改比当前已有自增长字段中的最大值更大,不能更小,因为更小不生效。

基本语法:alter table + 表名 + auto_increment = 值;

mysql> alter table my_auto auto_increment = 2;
Query OK, 0 rows affected
Records: 0  Duplicates: 0  Warnings: 0
mysql> show create table my_auto;
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table                                                                                                                                                           |
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| my_auto | CREATE TABLE `my_auto` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 |
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set

如上图所示,当咱们修改自增长小于当前自增长字段中的最大值时,虽然显示 SQL 语句执行成功,但实际上并没有修改成功。下面,在执行如下 SQL 语句,进行测试:

mysql> show create table my_auto;
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table                                                                                                                                                           |
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| my_auto | CREATE TABLE `my_auto` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 |
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set

如上图所示,显然当咱们修改自增长大于当前自增长字段中的最大值时,修改成功。

删除自增长

自增长是字段的一个属性,因此可以通过modify来进行修改。想要删除自增长的话,只需要保证字段没有auto_increment即可

  • 基本语法:alter table + 表名 + modify + 字段 + 类型;
mysql> alter table my_auto modify id int;
Query OK, 3 rows affected
Records: 3  Duplicates: 0  Warnings: 0

mysql> desc my_auto;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set

 

posted @ 2018-02-01 08:32  ZZUGPY  阅读(366)  评论(0编辑  收藏  举报