id INT PRIMARY KEY)。INSERT INTO t (id, col) VALUES (1, 'xxx')。Duplicate entry '1' for key 'PRIMARY',或使用了 REPLACE INTO / INSERT ... ON DUPLICATE KEY UPDATE 導致覆蓋。主鍵值固定不變,每次插入同一主鍵,MySQL 必須拋錯或更新現有行。
id INT AUTO_INCREMENT PRIMARY KEY,插入時不指定 id,MySQL 自動分配遞增值。INSERT INTO t (col) VALUES ('xxx')INSERT IGNORE INTO t (order_no, ...) VALUES (...),衝突時靜默跳過不報錯不覆蓋。INSERT INTO t (order_no, col) VALUES (...) ON DUPLICATE KEY UPDATE col=VALUES(col),衝突時只更新非主鍵列。INSERT INTO t (col) VALUES ('a'),('b'),('c'),單條 SQL 插入多行,性能提升 10 倍+。Navicat「編輯表數據」界面默認顯示主鍵列,若手工輸入相同主鍵再點「應用」,實際執行的是 UPDATE 或 REPLACE。請確認:
讓數據庫管主鍵(自增),業務邏輯別硬塞固定 ID。 覆蓋問題 99% 是主鍵衝突導致的預期行為,而非 Bug。