MySQL自增主鍵ID設(shè)置為0有坑
場(chǎng)景:A、B兩個(gè)數(shù)據(jù)庫(kù)有同樣的一個(gè)T表,從A庫(kù)T表導(dǎo)出數(shù)據(jù)、導(dǎo)入到B庫(kù)T表,導(dǎo)入成功后發(fā)現(xiàn)T表中有一條數(shù)據(jù)和其他表數(shù)據(jù)關(guān)聯(lián)不上了,通過(guò)排查才發(fā)現(xiàn),T表中的id為自增主鍵,有一條數(shù)據(jù)的id為0,導(dǎo)入到B庫(kù)的T表后id不再是0,而是下一個(gè)自增值,所以其他表如果是如果該id來(lái)和T表關(guān)聯(lián),那自然是關(guān)聯(lián)不上。
PS:同一個(gè)表里面導(dǎo)出數(shù)據(jù)后再重新導(dǎo)入也會(huì)出現(xiàn)同樣的問(wèn)題。
一、實(shí)踐一下
創(chuàng)建表:
CREATE TABLE `dept` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
添加數(shù)據(jù),把其中一條數(shù)據(jù)id修改為0

導(dǎo)出數(shù)據(jù)后清除數(shù)據(jù)再執(zhí)行SQL導(dǎo)入:
INSERT INTO `dept` (`id`, `name`) VALUES (0, '數(shù)據(jù)1'); INSERT INTO `dept` (`id`, `name`) VALUES (2, '數(shù)據(jù)2');
導(dǎo)入后的數(shù)據(jù)情況:

可以看到,導(dǎo)出后重新導(dǎo)入,id為0的數(shù)據(jù)變成3了,變成了下一個(gè)自增值。
二、原因
在 MySQL 中,當(dāng)表有一個(gè)自增主鍵列(AUTO_INCREMENT)時(shí),如果你嘗試插入 ID=0 的記錄,實(shí)際插入的 ID 不會(huì)保持為 0,而是會(huì)使用下一個(gè)自增值。
因?yàn)槟J(rèn)情況下,MySQL 將 ID=0 的插入請(qǐng)求視為"未指定值",因此會(huì)使用自增序列中的下一個(gè)可用值。
這種行為可以通過(guò) SQL 模式控制:如果啟用了 NO_AUTO_VALUE_ON_ZERO SQL 模式,MySQL 會(huì)允許插入 ID=0,默認(rèn)情況下這個(gè)模式是禁用的。
三、解決方案
1. 手動(dòng)修改數(shù)據(jù)
不正規(guī)。
2. 臨時(shí)修改 SQL 模式:
SET SESSION sql_mode='NO_AUTO_VALUE_ON_ZERO'; INSERT INTO your_table (id, ...) VALUES (0, ...);
3. 永久修改 SQL 模式(在 my.cnf/my.ini 中)
不推薦:
sql_mode=NO_AUTO_VALUE_ON_ZERO,...其他模式...
注意:不建議在自增主鍵中插入0值,這可能會(huì)導(dǎo)致某些奇奇怪怪的問(wèn)題。
到此這篇關(guān)于MySQL自增主鍵ID設(shè)置為0有坑的文章就介紹到這了,更多相關(guān)MySQL自增主鍵ID設(shè)置為0內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL數(shù)據(jù)過(guò)濾與計(jì)算字段實(shí)戰(zhàn)指南
本文介紹了MySQL數(shù)據(jù)過(guò)濾與計(jì)算字段的實(shí)戰(zhàn)技術(shù),包括多條件組合、通配符過(guò)濾、正則表達(dá)式搜索和計(jì)算字段的使用,感興趣的朋友跟隨小編一起看看吧2025-11-11
MySQL執(zhí)行.sql?文件的超詳細(xì)教學(xué)指南
和其他數(shù)據(jù)庫(kù)一樣,MySQL也提供了命令執(zhí)行sql腳本文件,方便地進(jìn)行數(shù)據(jù)庫(kù)、表以及數(shù)據(jù)等各種操作,這篇文章主要給大家介紹了關(guān)于MySQL執(zhí)行.sql?文件的超詳細(xì)教學(xué)指南,需要的朋友可以參考下2024-07-07
MySQL查詢(xún)性能慢時(shí)索引失效的排查與優(yōu)化實(shí)踐
在高并發(fā)和大數(shù)據(jù)量的生產(chǎn)環(huán)境中,MySQL的查詢(xún)性能至關(guān)重要,本文將圍繞索引失效這一常見(jiàn)問(wèn)題展開(kāi),帶你深入排查并徹底解決索引失效引發(fā)的性能瓶頸2025-08-08
Mysql學(xué)習(xí)之?dāng)?shù)據(jù)庫(kù)檢索語(yǔ)句DQL大全小白篇
這篇文章主要介紹了Mysql數(shù)據(jù)庫(kù)檢索語(yǔ)句DQL大全,本文適合數(shù)據(jù)庫(kù)初學(xué)者,小白也能看懂,有需要的朋友可以收藏閱讀,希望可以有所幫助2021-09-09
MySQL索引的一些常見(jiàn)面試題大全(2022年)
索引(Index)是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),是對(duì)表中一列或多列值進(jìn)行排序的結(jié)構(gòu),下面這篇文章主要給大家介紹了關(guān)于MySQL索引的一些常見(jiàn)面試題,文中介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02
Mysql單文件存儲(chǔ)刪除數(shù)據(jù)文件容量不會(huì)減少的bug與解決方法
這篇文章主要給大家介紹了Mysql單文件存儲(chǔ)刪除數(shù)據(jù)文件時(shí)容量不會(huì)減少的bug與解決方法,文中給出了詳細(xì)的解決方法,相信對(duì)遇到這個(gè)問(wèn)題的朋友們能帶來(lái)一定的幫助,下面來(lái)一起看看吧。2016-12-12

