先看代码:
user 表
+-------------+------+----+
| name | age | id |
+-------------+------+----+
| zhangzhibin | 13 | 1 |
| lisi | 13 | 2 |
| wangwu | 18 | 3 |
| zhangzhibin | 19 | 4 |
| lisi | 12 | 5 |
| wangwu | 13 | 6 |
| zhangzhibin | 11 | 7 |
| lisi | 14 | 8 |
| wangwu | 16 | 9 |
| zhangzhibin | 18 | 10 |
| zhaoliu | 14 | 12 |
| cc | 15 | 13 |
+-------------+------+----+
mysql> show create table user \G
*************************** 1. row ***************************
Table: user
Create Table: CREATE TABLE `user` (
`name` varchar(16) CHARACTER SET latin1 DEFAULT NULL,
`age` smallint(6) DEFAULT NULL,
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8//看这里,看这里,看这里~~~~
1 row in set (0.00 sec)
如上图 user表的三个在括号外的值:engine / auto_increment / default charset
这三个值都可以用 ALTER TABLE table_name var = value;来改变
engine 和 default charset 没什么,说下auto_increment:
①当你表中有50个值时,auto_increment是51,删去其中的若干个后auto_increment仍然是51,
意味着如果你在下一次insert时没有指明自增列id的序号,他是从51开始标识的:insert into user value('zz',12,'');
假如你将从上表中id=10-12-13的这三行删掉,并且将auto_increment的值改为11,那么紧接着你insert into user value('--','--','');时
表中的id就会从11开始增长
②如果你设定auto_increment的值小于user表中现在存在的id值,那么这次更改不会出错,不会警告,不会生效。