时间:2023-10-30来源:系统城装机大师作者:佚名
假如你的数据表中的数据如下图所示:
把自增主键的数值(AUTO_INCREMENT)设置为小于等于100的值(以数值50举例),我们可以看到mysql显示修改成功
此时再次添加数据并查询所有数据,发现主键id居然依旧从100开始继续增长
查询AUTO_INCRMENT数值发现数值为null
因为表中存在比你要修改AUTO_INCREMENT值大的主键id,导致无法把AUTO_INCREMENT修改为50,而且不会有任何报错,所以不要把AUTO_INCREMENT修改为小于 最大主键id 的值
MySQL支持数据字段自增,可以用来作为数据表的主键字段。
看一个数据表的创建实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
DROP TABLE IF EXISTS `spgl_dfxmsplcxxb`; CREATE TABLE `spgl_dfxmsplcxxb` ( `LSH` int (11) NOT NULL AUTO_INCREMENT COMMENT '流水号' , `DFSJZJ` varchar (50) NOT NULL COMMENT '地方数据主键' , `XZQHDM` varchar (6) NOT NULL COMMENT '行政区划代码' , `SPLCBM` varchar (100) NOT NULL COMMENT '审批流程编码' , `SPLCMC` varchar (200) NOT NULL COMMENT '审批流程名称' , `SPLCBBH` double (4,1) NOT NULL COMMENT '审批流程版本号' , `SPLCSXSJ` datetime NOT NULL COMMENT '审批流程生效时间' , `SPLCLX` int (11) NOT NULL COMMENT '审批流程类型' , `SPLCSM` varchar (2000) DEFAULT NULL COMMENT 'SPLCSM' , `FJMC` varchar (512) NOT NULL COMMENT '附件名称' , `FJLX` varchar (64) NOT NULL COMMENT '附件类型' , `FJID` varchar (100) NOT NULL COMMENT '附件ID' , `SJYXBS` int (11) NOT NULL COMMENT '数据有效标识' , `SJWXYY` varchar (200) DEFAULT NULL COMMENT '数据无效原因' , `SJSCZT` int (11) NOT NULL COMMENT '数据上传状态' , `SBYY` varchar (1000) DEFAULT NULL COMMENT '失败原因' , PRIMARY KEY (`LSH`), KEY `unique_main` (`XZQHDM`,`SPLCBM`,`SPLCBBH`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COMMENT= '表1:地方项目审批流程信息表' ; |
该表将LSH字段设置为自增主键,并默认auto_increment_increment=1、auto_increment_offset=1。
对该表执行show create table spgl_dfxmsplcxxb可以得到如下信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
CREATE TABLE `spgl_dfxmsplcjdxxb` ( `LSH` int (11) NOT NULL AUTO_INCREMENT COMMENT '流水号' , `DFSJZJ` varchar (50) NOT NULL COMMENT '地方数据主键' , `XZQHDM` varchar (6) NOT NULL COMMENT '行政区划代码' , `SPLCBM` varchar (100) NOT NULL COMMENT '审批流程编码' , `SPLCBBH` double (4,1) NOT NULL COMMENT '审批流程版本号' , `SPJDBM` varchar (100) DEFAULT NULL COMMENT '审批阶段编码' , `SPJDMC` varchar (200) NOT NULL COMMENT '审批阶段名称' , `SPJDXH` int (11) NOT NULL COMMENT '审批阶段序号' , `DYBZSPJDXH` varchar (200) NOT NULL COMMENT '对应标准审批阶段序号' , `SPJDSX` int (11) NOT NULL COMMENT '审批阶段时限' , `LCBSXLX` int (11) NOT NULL COMMENT '里程碑事项类型' , `SJYXBS` int (11) NOT NULL COMMENT '数据有效标识' , `SJWXYY` varchar (200) DEFAULT NULL COMMENT '数据无效原因' , `SJSCZT` int (11) NOT NULL COMMENT '数据上传状态' , `SBYY` varchar (1000) DEFAULT NULL COMMENT '失败原因' , PRIMARY KEY (`LSH`), KEY `unique_main` (`XZQHDM`,`SPLCBM`,`SPLCBBH`,`SPJDXH`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT= '表2:地方项目审批流程阶段信息表' |
对于表的记录间互相拷贝问题很容易造成自增字段的重复。
例如在我经历的一次项目:本地数据库和前置数据库进行数据同步时,本地库向前置库上传数据,前置库插入传来的数据并返回自增字段流水号更本地库。同步每3分种依据标志位检查执行一次。
这样,如果对本地库数据进行多次修改,那么就需要向前置库多次上传该条记录(或该条记录的拷贝记录)。
如果没有在上传前手动将前置库返回的流水号置为空,那么前置库将会用这个已有的流水号作为主键插入新数据(而不是重新生成新的流水号),从而导致主键重复的错误。
所以,在处理含有自增字段的表格时,如果自增字段和其他表格有数据上的关联,应当注意这种操作会不会导致自增字段的冲突。
2023-10-30
windows上的mysql服务突然消失提示10061 Unkonwn error问题及解决方案2023-10-30
MySQL非常重要的日志bin log详解2023-10-30
详解MySQL事务日志redo log一、单表查询 1、排序 2、聚合函数 3、分组 4、limit 二、SQL约束 1、主键约束 2、非空约束 3、唯一约束 4、外键约束 5、默认值 三、多表查询 1、内连接 1)隐式内连接: 2)显式内连接: 2、外连接 1)左外连接 2)右外连接 四...
2023-10-30
Mysql删除表重复数据 表里存在唯一主键 没有主键时删除重复数据 Mysql删除表中重复数据并保留一条 准备一张表 用的是mysql8 大家自行更改 创建表并添加四条相同的数据...
2023-10-30