前言
在 MySQL 数据库中,使用自增(AUTO_INCREMENT)字段简化了 ID 的管理,但这也带来一个问题:默认情况下,自增字段无法插入 ID 为 0 的值。在实际应用中,有时我们确实需要插入 ID 为 0 的记录。本文将深入探讨这个问题的成因,并提供几种有效的解决方案,以帮助开发者更灵活地管理数据库中的自增字段。
问题描述
近日利用 MySQL 上进行开发时,通过下面的 SQL 插入一条数据到数据库
INSERT INTO `cmp_helpdesk`.`config_type` (`id`, `type`, `name`, `parent_id`, `creat_user_id`, `update_user_id`, `creation_time`, `updation_time`, `is_deleted`) VALUES (0, 'service', '默认分类', NULL, 5, 5, '2024-04-22 15:36:04', '2024-04-22 15:36:04', 0);
想插入一条 ID 为 0 的数据
但是插入后,发现 ID 不为 0,而是自增的另外一个数字。
解决思路
根据一番搜索发现,在 官方sql_mode配置 找到下面的描述:
默认情况下,自增列插入 null 或者 0 的时候数据库会产生一个新的自增数值。如果想让自增列在只插入 null 的时候产生自增序列。就要提前设置 MySQL 的 sql_mode 包括 NO_AUTO_VALUE_ON_ZERO
。
可以用以下 SQL 在运行时设置
SET GLOBAL sql_mode = '_modes_';
SET SESSION sql_mode = '_modes_';
也可以在 MySQL 的配置文件 my.ini
或 my.cnf
中设置 sql_mode。
总结
在 MySQL 中,虽然自增字段的设计初衷是自动生成唯一的非零 ID,但我们仍然可以通过修改 SQL 语句、调整表定义或设置会话变量来插入 ID 为 0 的记录。掌握这些技巧可以帮助开发者更灵活地操作数据库,满足特定的业务需求。