2012-02-28 56 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