auto_increment是用于主键自动增长
的,从1开始增长,当你把第一条记录删除时,再插入第二条数据时,主键值是2,不是1。
问题来源:拷贝了公司项目的regions表,发现建表的sql语句如下:
CREATE TABLE `es_regions` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`parent_id` bigint(20) NOT NULL,
`region_path` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '路径',
`region_grade` int(8) NULL DEFAULT NULL COMMENT '级别',
`local_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '名称',
`zipcode` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮编',
`cod` tinyint(4) NULL DEFAULT NULL COMMENT '是否支持货到付款',
PRIMARY KEY (`id`) USING BTREE,
INDEX `index_region`(`region_path`, `region_grade`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1611603164220395523 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '国家统计局2021年10月31日数据 四级:省-市-区-街道' ROW_FORMAT = Compact;
注意到这里的AUTO_INCREMENT后面的数字巨长,不太懂是什么意思。
拷贝到新项目建表,新项目的id类型为int(11),新增数据则就报错:ERROR 1467 (HY000): Failed to read auto-increment value from storage engine
删了表之后重新创建:
CREATE TABLE `rw_regions` (
`id` INT ( 11 ) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`create_by` VARCHAR ( 64 ) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` VARCHAR ( 64 ) DEFAULT '' COMMENT '更新者',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`remark` VARCHAR ( 500 ) DEFAULT NULL COMMENT '备注',
`parent_id` BIGINT ( 20 ) NOT NULL,
`region_path` VARCHAR ( 255 ) DEFAULT NULL COMMENT '路径',
`region_grade` INT ( 8 ) DEFAULT NULL COMMENT '级别',
`chn_name` VARCHAR ( 100 ) NOT NULL COMMENT '中午名称',
`eng_name` VARCHAR ( 100 ) NOT NULL COMMENT '英文名称',
PRIMARY KEY ( `id` ),
KEY `index_region` ( `region_path`, `region_grade` ) USING BTREE
) ENGINE = INNODB DEFAULT CHARSET = utf8 ROW_FORMAT = COMPACT COMMENT = '国家地区城市表';
然后尝试新增一条记录,果然新完了之后-->AUTO INCREMENT=2