2012-01-30 146 views
4

我很新的PHP程序員,似乎無法找出在我與插入記錄我的MySQL數據庫腳麻:MYSQL插入記錄跳過的ID(自動遞增)

我的測試腳本(學習目的)調用eBay API並將請求的信息下載到MySQL數據庫中,但我似乎正在獲取腳本跳過Auto Increment上的ID的問題。從我一直在這裏閱讀的情況來看,這通常是在刪除記錄時,但對於我來說並非如此,因爲沒有刪除記錄,差距越來越大。

我的問題是:是否有其他的東西可以導致id跳過隨機數字?

數據庫例如: 號碼從1-21就好了運行,但隨後有云:28,43,51,55,58 我已經確認並下一個要添加應該是59:

show create table 'tbl' 
+3

向我們展示您的php代碼,sql插入和表創建 – 2012-01-30 16:34:25

+4

失敗/回滾事務也會導致此問題。 ID不會被重複使用/回收。缺乏序列性導致問題? – 2012-01-30 16:34:47

+0

你是否通過插入查詢ID? – Sabari 2012-01-30 16:35:19

回答

4

是你的代碼使用交易?如果您回滾插入該表的事務,即使事務回滾,也不會回滾標識計數器。

看到這個問題:MySQL table with AUTO_INCREMENT primary id does not release the number after a rollback

+0

嗨約翰, 該腳本確實提取交易,但應將它們全部輸入到數據庫中,因爲它們在此之後排序。有沒有刪除/回滾測試我會清空數據庫和檢索25新的應該進入1-25,但仍似乎跳過一些ID – user1166742 2012-01-30 16:45:23

+0

嗨,約翰, 檢查了這一點,但我沒有刪除任何ID所以差距不應該是這個造成的 感謝您的時間 – user1166742 2012-01-30 16:49:48

+0

我想你誤會了。如果您的代碼是在回滾的事務中添加行,則不會回滾標識增量。我沒有透露有關刪除ID的事情。 – JohnFx 2012-01-30 19:27:49

0

我種猜測代碼將是什麼樣子,因爲我太貝寶的API的現在,但這裏是一個辦法讓AUTO_INCREMENT做的工作

這是我的INSERT命令看起來像並一直在努力。但提供一些代碼肯定會有所幫助。

"INSERT INTO `table` (auto_increment_id, field1, field2, field3) VALUES ('','$field1','$field2','$field3')"; 

如果您 必須去與每一個字段值後留下第一個()的空白,只是把價值觀,但我發現你的方式,你說 哪些領域應該得到什麼樣的價值。

要連接到實時數據庫,您可以使用SQLite。他們被稱爲數據庫瀏覽器。

+0

嗨格里戈爾, 我現在就試試這個,看看我是如何得到的,儘管我確實認爲值中的NULL做同樣的工作? 非常感謝, – user1166742 2012-01-30 16:48:38

+0

我其實沒有嘗試過NULL,因爲這種方式對我來說總是有效。 – Grigor 2012-01-30 17:01:34

+0

這對我和PHP的PDO有效 – 2015-03-04 15:38:28