Gå til innhold

Hva betyr feilmeldingen? Duplicate entry '2199' for key 'PRIMARY'


Anbefalte innlegg

Heisann, jeg skulle nå prøve å laste opp en kode til min mysqldatabase, dette er til mitt mafiaspill.

Kan noen forklare meg hva som er feil med mysqlkoden?

 

Feil

SQL-spørring:

 

INSERT INTO `admin_log`

VALUES ( 2199, 2, 'Edited File - announcements.html', 'Apr 29, 2007 - 8:41:31 am', '' ) ;

 

 

MySQL sa:

 

#1062 - Duplicate entry '2199' for key 'PRIMARY'

 

 

Si i fra visst dere skal ha den koden jeg skulle legge inn i databasen.

  • Liker 1
Lenke til kommentar
Videoannonse
Annonse

Problemet er at du har et felt i databasen som er satt til å være primary, og da kan du ikke ha to rader med samme verdi i det feltet. Her sier jo feilmeldingen at den ikke kan legge til raden pga at det er en lik rad i tabellen allerede med verdi 2199.

Lenke til kommentar

Fordi verdien 2199 finnes allerede i databasen og derfor får du ikke satt inn samme verdi to ganger fordi der du setter den inn kan ikke verdien eksistere to-ganger fordi feltet er en primary-key.

Lenke til kommentar

Heisann, jeg skulle nå prøve å laste opp en kode til min mysqldatabase, dette er til mitt mafiaspill.

Kan noen forklare meg hva som er feil med mysqlkoden?

 

Feil

SQL-spørring:

 

INSERT INTO `admin_log`

VALUES ( 2199, 2, 'Edited File - announcements.html', 'Apr 29, 2007 - 8:41:31 am', '' ) ;

 

 

MySQL sa:

 

#1062 - Duplicate entry '2199' for key 'PRIMARY'

 

 

Si i fra visst dere skal ha den koden jeg skulle legge inn i databasen.

 

Prøv også å reparere og defragmenter tabellen via phpmyadmin.

Lenke til kommentar

Ellers vil alltids denne funke (genererer nytt nr)

INSERT INTO `admin_log` (SKRIV INN NAVN PÅ TABELL KOLONNENE HER MED KOMMA MELLOM HVER OG UTEN DEN FØRSTE (id eller hva det er))
VALUES ( 2, 'Edited File - announcements.html', 'Apr 29, 2007 - 8:41:31 am', '' ) ;

Lenke til kommentar

Du kan også se på muligheten til å benytte ON DUPLICATE KEY UPDATE: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

 

Ett greit eksempel fra kommentarene om hvordan utforme sql'en

Posted by Shane McEwan on October 27 2006 4:09am [Delete] [Edit]

 

 

Here is an example of how to update multiple columns using values supplied in the INSERT statement. This assumes that column 'a' is the unique key.

 

INSERT INTO table (a,b,c,d,e) VALUES (1,2,3,4,5) ON DUPLICATE KEY UPDATE b=VALUES(b), c=VALUES©, d=VALUES(d), e=VALUES(e);

 

This also works for multiple rows:

 

INSERT INTO table (a,b,c,d,e) VALUES (1,2,3,4,5), (6,7,8,9,10) ON DUPLICATE KEY UPDATE b=VALUES(b), c=VALUES©, d=VALUES(d), e=VALUES(e);

 

If you have a lot of columns it would be nice if you could use the following syntax:

 

INSERT INTO table (a,b,c,d,e) VALUES (1,2,3,4,5) ON DUPLICATE KEY UPDATE VALUES(b,c,d,e);

 

and it would match the columns you want to update with the values in the INSERT. Unfortunately, this does not work. You MUST explicitly provide each column assignment.

Lenke til kommentar

Prøv også å reparere og defragmenter tabellen via phpmyadmin.

Hvis dét hjelper på duplicate key er det noe seriøst galt med MySQL ...

 

Nei, fikk samme feil som deg etter en MySQL-server kræsj. Reparerte tabellen, og feilen ble borte.

Du hadde MySQL-server kræsj Thomas, mens trådstarter prøver å sette inn en ID som allerede eksisterer.

Lenke til kommentar

 

Nei, fikk samme feil som deg etter en MySQL-server kræsj. Reparerte tabellen, og feilen ble borte.

Hvis du mener det ikke er en seriøs feil at databasen blir inkonsistent så er det greit for meg, bare jeg slipper å mene det samme selv ;-) (Forøvrig ikke meg som har fått denne feilen.)

Lenke til kommentar

 

Du hadde MySQL-server kræsj Thomas, mens trådstarter prøver å sette inn en ID som allerede eksisterer.

 

Jepp, og det ser endatil ut som det er et tre år gammelt log-entry fra et annet system. Ville vurdert å enten tømme logtabellen helt, kanskje problemet er at det ligger rader med angitt pk der fra før av. Evt kanskje enda bedre - ikke legge inn eldgamle log-entries fra andre systemer, dvs. slette linjene "insert into admin_log ..." fra SQL-fila som kjøres?

Lenke til kommentar

Av ren nysgjerrighet så lurer jeg på om det er MyISAM eller InnoDB du bruker. Regner vel med at det er MyISAM siden et serverkrasj medfører korrupte data. MyISAM er jo ikke akkurat kjent for ACID.

 

Av ren "ondskap" så håper jeg det er InnoDB du bruker slik at det nok en gang er bevist at MySQL er et ubrukelig leketøy.

 

Selv om feilmeldingen forsvant så bør du være bekymret for hva annet som har forsvunnet under reparasjonen. Du ør vurdere å bytte til f.eks. InnoDB (hvis det er MyISAM som benyttes nå), eller aller helst til et annet RDBMS (men det er nok for mye arbeid). Hvis dataene har verdi for deg så spiller du russisk rulett ved å fortsette med samme databasemotor.

Lenke til kommentar

Prøv også å reparere og defragmenter tabellen via phpmyadmin.

Hvis dét hjelper på duplicate key er det noe seriøst galt med MySQL ...

 

Nei, fikk samme feil som deg etter en MySQL-server kræsj. Reparerte tabellen, og feilen ble borte.

Du hadde MySQL-server kræsj Thomas, mens trådstarter prøver å sette inn en ID som allerede eksisterer.

 

Ja..?

Hadde kræsj pga feil innstillinger iforhold til trafikk.

Mange sender spørring til samme tabell, dataen blir satt inn men servern kræsjer, og auto increment rekker ikke oppdatere seg. Som fører til at den prøver sette inn IDen som ble satt inn før kræsjen. Derfor det hjalp og reparere tabellen.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...