2015-04-26 4 views
0

Я создал скрипт, который каждый час проходит через разные статьи и добавляет их в базу данных. Однако в этой таблице базы данных я установил уникальный ключ по дате и названию, поэтому он не будет добавлять одни и те же статьи снова и снова. Это, однако, кажется большим странным эффектом, когда идентификаторы идентификатора auto auto increment новостей, похоже, подсчитываются, хотя новости не добавляются? Как я могу это исправить?Auto increment перепрыгивает через ids

$insert_news = $con->prepare("INSERT IGNORE INTO news (`title`, `url`, `image_url`, `date`, `news_text`, `website_id`) VALUES (?, ?, ?, ?, ?, 2)"); 
$insert_news->bind_param("sssss", $hltv_title, $hltv_link, $hltv_img, $hltv_date, $full_text_dont); 
$insert_news->execute(); 
+1

Когда вставка выходит из строя, 'auto_increment' отбрасывается. MySQL фактически пытается использовать его, терпит неудачу и забывает о номере (просто так). Даже если это кажется плохим или противостоящим интуитивным, это на самом деле ** желательно **. Базы данных работают в параллельной среде, и это число «dropping» имеет свою причину. В принципе вы не можете исправить это, потому что 'auto_increment' ** не предоставляет последовательные номера **. Он просто предоставляет следующий ** более высокий ** номер. Ничего плохого не происходит, если оставить его как есть. –

ответ

0

Возможный дубликат INSERT IGNORE increases auto increment counter even no record is added? и prevent autoincrement on MYSQL duplicate insert. Если вы хотите предотвратить пробелы в ваших автоматически увеличивающихся идентификаторах, вам следует рассмотреть возможность изменения логики. Например, сначала проверьте, существует ли запись (используя SELECT-запрос), прежде чем пытаться ее вставить.

+0

Я сделал это вначале, но другой парень сказал мне, что раньше было делать правильную выборку? –

+0

Что произойдет, если я удалю игнорировать? –

+0

Никогда не проверяйте, существует ли запись, прежде чем вставлять ее. Это худшее, что вы можете сделать. Всегда вставляйте и если вставка не работает - вуаля, вы просто предотвратили дубликаты. Не пытайтесь избежать пробелов в autoincremented ids, это просто приводит к миру боли, путаницы и общего WTF, когда действительно, действительно странно, что все начинает происходить. –