CREATE TABLE test ( id INT(11) NOT NULL AUTO_INCREMENT, field VARCHAR(50) NOT NULL, PRIMARY KEY (id) )
以上是创建一个测试表的代码。其中id字段是主键,使用AUTO_INCREMENT关键字进行自增。如果添加数据后发现自增不起作用,可以排查以下几个方向:
1.表结构定义错误。当大家使用AUTO_INCREMENT关键字时,id字段必须是一个整数类型(int、bigint等)。如果定义为其他类型,如varchar,那么自增不起作用就是必然的。
2.插入数据时指定了id值。如果插入数据时指定了id字段的值,那么自增特性就会失效。比如下面这条语句:
INSERT INTO test (id, field) VALUES (2, 'test');
在执行以上语句后,再插入一条数据,id字段的值就会从3开始自增。在实际开发中,最好不要指定id值,除非特殊需求需要。
3.表已存在数据。如果表中已经存在数据,即使主键id字段规定为自增,插入数据时id也不会从1开始自增,而是从目前表中最大的id值+1开始自增。如果想让id重新从1开始自增,可以使用以下语句:
ALTER TABLE test AUTO_INCREMENT = 1;
4.表被锁定。在表发生update和insert操作时,该表被锁定,此时如果有其他事务进行操作,那么id的自增就会受到影响。为了避免这种情况的发生,大家可以使用InnoDB引擎的行级锁,或者将表拆分成多个子表,减小锁定的范围。
总之,如果遇到MySQL的id自增不起作用的问题,首先需要检查表结构定义是否有误,然后再逐一排查剩余的可能原因。