mysql 主键0插入问题

当在MySQL中尝试插入自增主键值为0时,由于默认的sql_mode设置,数据库会自动忽略0值并生成新的自增序列。这导致实际插入的ID并非预期的0,而是表的最大值加1。解决这个问题需要调整sql_mode,包含NO_AUTO_VALUE_ON_ZERO选项。了解这一行为对于正确操作带有自增主键的表至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主键为自增

MySQL 插入时值设置为0,而实际的结果却是该表的最大值

CREATE TABLE `test` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;
insert into test VALUES (0);

select * from test;

导致此结果的原因是,mysql的 sql_mode 策略导致的,默认情况下当ID是0或者null的时候,数据库会自动产生一个新的自增序列作为这条记录的ID。这就是我们插入0值ID记录时与期望不符原因。

select @@sql_mode;
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

如果想让自增列在只插入 0 的时候产生自增序列,就要提前设置mysql的sql_mode包括NO_AUTO_VALUE_ON_ZERO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值