1、设置为auto_increment的列具有自增的属性,起始值默认为1,后续没添加一条记录,auto_increment的列自动递增1;
1)创建一个表Ttb1用来测试用;
mysql> create table Ttb1 (ID int not null auto_increment,name char(20),primary key(ID));
mysql> desc Ttb1;
+-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+----------------+
| ID | int(11) | NO | PRI | NULL | auto_increment |
| name | char(20) | YES | | NULL | |
+-------+----------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
2)连续插入两条记录,在插入数据时,不指定ID的值;
mysql> insert into Ttb1(name) values('zhangsan'),('lisi');
Query OK, 2 rows affected (0.04 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from Ttb1;
+----+----------+
| ID | name |
+----+----------+
| 1 | zhangsan |
| 2 | lisi |
+----+----------+
2 rows in set (0.00 sec)
在插入数据时,设置了auto_increment 的ID列,该列不指定值时,该值会自动填充,且每添加一条记录,该值加1 ;
2、手动更新某记录的ID值,该ID后的数据(包括ID)不受影响,即该ID的数据不会随着更新后的ID值自动进行变化。
1)为测试效果明显,再往表格插入两条数据。
mysql> insert into Ttb1(name) values('wangwu'),('heliu');
Query OK, 2 rows affected (0.03 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from Ttb1;
+----+----------+
| ID | name |
+----+----------+
| 1 | zhangsan |
| 2 | lisi |
| 3 | wangwu |
| 4 | heliu |
+----+----------+
4 rows in set (0.00 sec)
mysql> update Ttb1 set ID=10 where name='lisi';
Query OK, 1 row affected (0.04 sec)
Rows matched: 1 Changed: 1 Warnings: 0
3)再查看表格数据; 可知在更改其中某个具有auto_increment属性的值后,已有的后续数据不受影响。
mysql> select * from Ttb1;
+----+----------+
| ID | name |
+----+----------+
| 1 | zhangsan |
|<span style="color:#009900;"> 3 | wangwu |
| 4 | heliu </span> |
|<span style="color:#ff0000;"> 10 | lisi </span> |
+----+----------+
4 rows in set (0.00 sec)
3、如果再往表中继续插入数据,ID值会在原有递增的ID基础上继续递增,而不会在手动指定的auto_increment列的基础上递增;
1)在上表的基础上插入一条记录
mysql> insert into Ttb1(name) values('liutingz');
Query OK, 1 row affected (0.05 sec)
mysql> select * from Ttb1;
+----+----------+
| ID | name |
+----+----------+
| 1 | zhangsan |
| 3 | wangwu |
| 4 | heliu |
| <span style="color:#ff0000;"> 5 | liutingz |</span>
| 10 | lisi |
+----+----------+
5 rows in set (0.00 sec)
mysql> insert into Ttb1(name) values('liutingz'); //此时ID=6
Query OK, 1 row affected (0.05 sec)
mysql> insert into Ttb1(name) values('liutingz'); <span style="font-family: Arial, Helvetica, sans-serif;">//此时ID=7</span>
Query OK, 1 row affected (0.04 sec)
mysql> insert into Ttb1(name) values('liutingz'); <span style="font-family: Arial, Helvetica, sans-serif;">//此时ID=8</span>
Query OK, 1 row affected (0.04 sec)
mysql> insert into Ttb1(name) values('liutingz'); <span style="font-family: Arial, Helvetica, sans-serif;">//此时ID=9</span>
Query OK, 1 row affected (0.04 sec)
mysql> insert into Ttb1(name) values('liutingz'); <span style="font-family: Arial, Helvetica, sans-serif;">//此时ID=10,与上面已经存在的ID=10有冲突。</span>
<span style="color:#ff0000;">ERROR 1062 (23000): Duplicate entry '10' for key 'PRIMARY'</span>
mysql> insert into Ttb1(name) values('liutingz');
Query OK, 1 row affected (0.03 sec)
mysql>
mysql> insert into Ttb1(name) values('liutingz');
Query OK, 1 row affected (0.03 sec)
mysql> select * from Ttb1;
+----+----------+
| ID | name |
+----+----------+
| 1 | zhangsan |
| 3 | wangwu |
| 4 | heliu |
| 5 | liutingz |
| 6 | liutingz |
| 7 | liutingz |
| 8 | liutingz |
| 9 | liutingz |
| 10 | lisi |
| 11 | liutingz |
| 12 | liutingz |
+----+----------+
11 rows in set (0.00 sec)
5、删除某条记录,再插入一条数据是,具有auto_increment的列会在原来的基础上加1,不会使用删除后的auto_increment空出来的值。
1)为方便测试,再上表再插入一条记录;
mysql> insert into Ttb1(name) values('yangbo');
Query OK, 1 row affected (0.03 sec)
mysql> select * from Ttb1;
+----+----------+
| ID | name |
+----+----------+
| 1 | zhangsan |
| 3 | wangwu |
| 4 | heliu |
| 5 | liutingz |
| 6 | liutingz |
| 7 | liutingz |
| 8 | liutingz |
| 9 | liutingz |
| 10 | lisi |
| 11 | liutingz |
| 12 | liutingz |
| 13 | yangbo |
+----+----------+
12 rows in set (0.00 sec)
2)删除最后一条记录,再插入一条记录,发现插入的新的记录不会使用删除掉后空出来的ID值,而是再使用继续递增的ID值。
mysql> delete from Ttb1 where name='yangbo';
Query OK, 1 row affected (0.04 sec)
mysql> insert into Ttb1(name) values('chenglong');
Query OK, 1 row affected (0.04 sec)
mysql> select * from Ttb1;
+----+-----------+
| ID | name |
+----+-----------+
| 1 | zhangsan |
| 3 | wangwu |
| 4 | heliu |
| 5 | liutingz |
| 6 | liutingz |
| 7 | liutingz |
| 8 | liutingz |
| 9 | liutingz |
| 10 | lisi |
| 11 | liutingz |
| 12 | liutingz |
| 14 | chenglong |
+----+-----------+
12 rows in set (0.00 sec)
So,经以上测试得知:
1、设置为auto_increment的列具有自增的属性,在不指定该列的值插入数据时,该列的起始值默认为1,没插入一条记录,该列值默认递增1;
2、update auto_increment列的值,不影响后续添加的数据,后续添加的数据,其auto_increment列的值继续在原来递增的基础上递增,但如果后续插入的值如果与前手动update值有冲突时,则报错,后续继续插入数据,可正常插入数据。
3、删除某列的值,不影响后续添加的数据,后续添加的数据,其auto_increment列的值继续在原来递增的基础上递增;