Problemi auto increment con query Insert Into Select

  • Creatore Discussione Creatore Discussione Elranius
  • Data di inizio Data di inizio

Elranius

Nuovo Utente
17 Apr 2013
11
0
1
Buongiorno a tutti,

mi sono accorto che la seguente query che uso per trasferire dati da una tabella "temporanea" a quella definitiva, mi mangia dei valori di auto increment per l'id chiave primaria della tabella definitiva.

La query che uso è questa:

Codice:
INSERT INTO DB_Name.Tab_definitiva(valore1, valore2, valore3)
  SELECT "valore_costante", valore_temp2, valore_temp3 FROM DB_Name.Tab_temp WHERE valore_temp2 = "un valore"

la query non ha mai dato errore, viene eseguita sempre correttamente, ma è come se dopo l'esecuzione bloccasse già dei valori dell'auto increment.

Cerco di spiegarmi meglio con degli esempi perchè la cosa è strana.
Se eseguo la query e copio 3 righe o meno dalla tabella temporanea, problemi non ne riscontro, il valore di auto increment sembra regolare.

Se però copio 5 righe alla prima esecuzione i valore è corretto l'incremento è lineare, ma se eseguo nuovamente mi perde 3 valori e la tabella si presenta cosi

id valori
.... ...
2009 valori....
si mangia 3 valori di increment...
2010 valori....
2014 valori....
2015 valori....
2016 valori....
2017 valori....
2018 valori....

come si nota i valore 2011, 2012 e 2013 non sono utilizzati.

Se copio 9 righe appena dopo averne copiate 5, perdo sempre 3 valori dell'incremento, ma se subito dopo copio altre 5, perdo 7 valori

id valori
.... ...
2014 valori....|
2015 valori....|
2016 valori....| copiate 5 righe
2017 valori....|
2018 valori....|
si mangia 3 valori di increment...
2022 valori....|
2023 valori....|
2024 valori....|
2025 valori....|
2026 valori....| copiate 9 righe
2027 valori....|
2028 valori....|
2029 valori....|
2030 valori....|
si mangia 7 valori di increment...
2038 valori....|
2039 valori....|
2040 valori....| copiate altre 5 righe
2041 valori....|
2042 valori....|

Cosa può essere a produrre questo effetto?
E soprattutto, come posso correggerlo?

Grazie a tutti, spero di essere stato chiaro nell'esposizione
 
Le query mi sembrano disordinate e devi invertirle di posizione, prima leggi e poi inserisci. La giusta sintassi delle due query è:
PHP:
$query = "SELECT * FROM DB_Name.Tab_temp WHERE valore_temp2 = '".$valore."'";
$query = "INSERT INTO DB_Name.Tab_definitiva (valore1, valore2, valore3) VALUES ('".$valore."','".$valore."','".$valore."')";
 
Scusa ma la sintassi delle query cosi come l'ho scritta è corretta infatti vengono eseguite senza errori.
Utilizzo l'insert da una select direttamente, è nota come prassi.
Il mio problema è solamente capire se c'è qualche motivo nascosto tale per cui vengono saltati degli indici di auto increment.
Comunque grazie per aver risposto al post.
 

Discussioni simili