Che cosa potrebbe causare ID duplicati su un incremento automatico primario campo chiave (mysql)?

StackOverflow https://stackoverflow.com/questions/514018

  •  21-08-2019
  •  | 
  •  

Domanda

RISOLTO

Dallo sviluppatore: il problema era che una versione precedente del codice stava ancora scrivendo al tavolo che ha usato id manuale anziché l'incremento automatico. Nota a sé:. Controllare sempre per gli altri luoghi possibili in cui la tabella viene scritto

Stiamo ottenendo chiavi duplicate in una tabella. Non sono inseriti nello stesso tempo (6 ore di distanza).

Struttura della tabella:

CREATE TABLE `table_1` (
  `sales_id` int(10) unsigned NOT NULL auto_increment,
  `sales_revisions_id` int(10) unsigned NOT NULL default '0',
  `sales_name` varchar(50) default NULL,
  `recycle_id` int(10) unsigned default NULL,
  PRIMARY KEY  (`sales_id`),
  KEY `sales_revisions_id` (`sales_revisions_id`),
  KEY `sales_id` (`sales_id`),
  KEY `recycle_id` (`recycle_id`)
) ENGINE= MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=26759 ;

L'inserto:

insert into `table_1` ( `sales_name` ) VALUES ( "Blah Blah" )

Ci sono in esecuzione MySQL 5.0.20 con PHP5 e utilizzando mysql_insert_id () per recuperare l'inserto id immediatamente dopo la query di inserimento.

È stato utile?

Soluzione

Ho avuto un paio di errore di chiave duplicata appaiono improvvisamente nei database MySql nel passato, anche se la chiave primaria è definito e auto_increment. Ogni volta è stato perché la tabella è danneggiato.

Se si è corrotto l'esecuzione di una tabelle di controllo dovrebbe esporre il problema. È possibile farlo eseguendo:

CHECK TABLE tbl_name

Se torna come corrotto in ogni caso (Will solito dire che la dimensione è più grande di quanto in realtà dovrebbe essere) poi basta eseguire il seguente di ripararlo:

REPAIR TABLE tbl_name

Altri suggerimenti

Il campo sales_id hanno una principale (o unico) chiave? Se no, allora qualcos'altro sta probabilmente facendo inserti o aggiornamento che viene ri-utilizzano numeri esistenti. E per "qualcos'altro" Io non intendo solo il codice; potrebbe essere un essere umano con accesso al database farlo accidentalmente.

Come disse l'altro; con il tuo esempio non è possibile.

E 'estranei alla tua domanda, ma non c'è bisogno di fare una chiave separata per la colonna chiave primaria - è solo l'aggiunta di un indice non univoco in più al tavolo quando hai già la chiave univoca (primario).

  

Stiamo ottenendo chiavi duplicate in una tabella.

Vuoi dire che si stanno ottenendo gli errori, come si tenta di inserire, o vuoi dire di avere alcuni valori archiviati nella colonna più di una volta?

incremento automatico calci solo quando si omette la colonna dal vostro inserto, o tenta di inserire NULL o zero. In caso contrario, è possibile specificare un valore in un'istruzione INSERT, over-riding il meccanismo di auto-incremento. Ad esempio:

INSERT INTO table_1 (sales_id) VALUES (26759);

Se il valore specificato già esiste nella tabella, si otterrà un errore.

Si prega di inviare i risultati di questa query:

SELECT `sales_id`, COUNT(*) AS `num`
FROM `table_1`
GROUP BY `sales_id`
HAVING `num` > 1
ORDER BY `num` DESC
  • Se si dispone di una chiave univoca in altri campi, che potrebbe essere il problema.

  • Se avete raggiunto il valore più alto per la colonna auto_increment MySQL continuare a cercare di reinserirlo. Ad esempio, se sales_id era una colonna tinyint, si otterrebbe errori di chiave duplicati dopo aver raggiunto id 127.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top