2012-02-28 4 views
0

У меня есть столбец Auto increment ID в моей таблице, и он отлично работает, когда я вставляю записи с помощью PHP. Я должен каждый день удалять записи из этой таблицы с помощью инструкции DELETE. Я изменил файл PHP.ini и перезапустил машину. По какой-то причине Auto increment ID снова начинался с «1». Не было записей в таблице, когда я перезапустил машину. Я использую PHP 5.3.8 и MySQL 5.5.21 под управлением IIS. Пожалуйста, дайте мне знать, если есть какие-либо предложения. Вот моя схема таблицы.странная проблема с MySQL Auto Increment 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

+0

не вы заново создать таблицу случайно? –

+0

Запишите свой оператор вставки, если вы не ввели значение. –

ответ

2

Использование DELETE без каких-либо где положение такое же, как усечение таблицы, следовательно, они оба сбросить значение Далее AUTOINDEX для таблицы. (Что, что люди обычно хотят/ожидать)

Может использовать что-то вроде следующего, чтобы обойти это в вашем случае, может быть:

mysql_query ( Sprintf ( «ALTER TABLE имя_таблица AUTO_INCREMENT =% D ", mysql_insert_id() + 1 ));

(Если DELETE очищает значение вставки, то вам просто нужно кэшировать перед вашей DELETE/TRUNCATE)

+0

Будет ли добавлено ненужное предложение WHERE ('WHERE 1 = 1')? (Я не могу проверить прямо сейчас, возможно, стоит попробовать @ nav100) –