2012-02-28 77 views
0

我有一個自動遞增ID列在我的表中,它確實工作正常,當我插入記錄使用PHP。我必須使用DELETE語句每小時從此表中刪除記錄。我更改了PHP.ini文件並重新啓動了機器。出於某種原因,自動增量ID再次從「1」開始。當我重新啓動機器時,表格中沒有記錄。我使用在IIS下運行的PHP 5.3.8和MySQL 5.5.21。請讓我知道是否有任何建議。這是我的表格模式。奇怪的問題與MySQL自動遞增Id

CREATE TABLE `test_table` (
    `test_id` int(11) NOT NULL AUTO_INCREMENT, 
    `test_date` datetime DEFAULT NULL, 
    `test_location` varchar(2000) NOT NULL, 
    `test_summary` varchar(4000) NOT NULL, 
    `create_dtm` timestamp NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`test_id`) 
) ENGINE=InnoDB 

這裏是我的插入查詢

$Sql = "INSERT INTO test_table(test_date, test_location, test_summary) VALUES ('" .sDate. "', '" .$location. "', '" .$summary. "')"; 

     $Result = mysql_query($Sql) or die(mysql_error()); 
     $new_id = MySql_Insert_Id(); 

這裏是DELETE。

 $Sql1 = "DELETE FROM test_table"; 
     $Result1 = mysql_query($Sql1) or die(mysql_error()); 
+0

顯示您的插入語句 – triclosan 2012-02-28 15:24:01

+0

沒有你偶然重新創建表? – 2012-02-28 15:24:17

+0

如果您不強制使用值,請在您的插入語句中檢查。 – 2012-02-28 15:31:04

回答

2

在沒有where子句的情況下使用DELETE與TRUNCATING表相同,因此它們都重置表的Next AutoIndex值。 (這就是人們通常會希望/預期)

可以使用類似下面來解決這個問題,你的情況可能:

的mysql_query( 的sprintf( 「ALTER TABLE tbl_name AUTO_INCREMENT =%d 「, mysql_insert_id()+ 1 ));

(如果刪除清除插入值,那麼你只需要你的DELETE/TRUNCATE之前緩存它)

+0

會添加一個無意義的WHERE子句('WHERE 1 = 1')嗎? (我現在無法測試,也許值得一試@ nav100) – 2012-02-28 18:21:58