Anfänger: ERROR 1062 (23000): Duplicate entry '0' for key 'PRIMARY'

gutschy

Aktiver Benutzer
Beiträge
32
Hallo Leute,

versuche gerade ein Tutorial Beispiel nachzuvollziehen. Ich habe zuerst Daten aus einer Tabelle in eine TXT Datei kopiert. Dann die Tabelle geleert und anschließend den Inhalt aus der TXT Datei versucht wieder in die Tabelle einzuspielen. Das Resultat ist die Fehlermeldung aus der Überschrift. Hatte das Problem eher schon einmal mit einer Ignore Anweisung gelößt aber das kann es ja nicht sein auf Dauer.

Hier mal meine Befehle:
Code:
mysql> DELETE FROM Cars;
Query OK, 8 rows affected (0.00 sec)

mysql> SELECT * FROM Cars;
Empty set (0.01 sec)

mysql> LOAD DATA INFILE '/tmp/cars.txt' INTO TABLE Cars FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';
ERROR 1062 (23000): Duplicate entry '0' for key 'PRIMARY'
Und hier noch die Tabellenbeschreibung:
Code:
mysql> DESCRIBE Cars;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| Id    | int(11)     | NO   | PRI | NULL    |       |
| Name  | varchar(50) | YES  |     | NULL    |       |
| Cost  | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

Google hatte so einige Lösungsvorschläge aber irgendwie hat mich da mein Englisch verlassen. Scheint keine große Sache zu sein, oder?

Gruss,

Gutschy
 
Werbung:
Hallo Leute,

versuche gerade ein Tutorial Beispiel nachzuvollziehen. Ich habe zuerst Daten aus einer Tabelle in eine TXT Datei kopiert. Dann die Tabelle geleert und anschließend den Inhalt aus der TXT Datei versucht wieder in die Tabelle einzuspielen. Das Resultat ist die Fehlermeldung aus der Überschrift. Hatte das Problem eher schon einmal mit einer Ignore Anweisung gelößt aber das kann es ja nicht sein auf Dauer.

Noch mal zur Sicherheit: die Daten waren erst so in dieser Tabelle, ja? Oder ist die neu erstellt oder kommen die Daten von woanders her?
 
Die Daten kommen genauso aus der Tabelle.
Code:
mysql> SELECT * INTO OUTFILE '/tmp/cars.txt' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n
' FROM Cars;
Query OK, 8 rows affected (0.01 sec)
 
Die Daten kommen genauso aus der Tabelle.
Code:
mysql> SELECT * INTO OUTFILE '/tmp/cars.txt' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n
' FROM Cars;
Query OK, 8 rows affected (0.01 sec)


Gut, der Fehler ist eindeutig: im PK dürfen keine 2 gleichen Werte stehen. Beim Import merkt MySQL es. Wenn die Daten vorher so aus derselben Tabelle geholt wurden, hatte es also MySQL vorher nicht bemerkt.

Soviel zum Thema Datenkonsistenz in MySQL.

Könnt natürlich sein, Du hast den Export-Befehl mehrfach gemacht und das jedesmal an die Datei angehangen. Das schon geprüft?


Ansonsten: wenn Du ernsthaft SQL lernen willst: nehm nicht MySQL.
 
Erstmal Danke für deine schnelle Hilfe, akretschmer.
Aber ich kann dir nicht ganz folgen. Hier mal die Tabelle:
Code:
1,Audi,52642

2,Mercedes,57127

3,Skoda,9000

4,Volvo,29000

5,Bentley,35000

6,Citroen,21000

7,Hummer,41400

8,Volkswagen,21600

Der PK ist schon mal in der Tabelle nicht doppelt. Wenn ich nach der Fehlermeldung die Tabelle aufrufe gibt es allerdings Einträge.
Code:
mysql> LOAD DATA INFILE '/tmp/cars.txt' INTO TABLE Cars FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
mysql> SELECT * FROM Cars;
+----+----------+-------+
| Id | Name     | Cost  |
+----+----------+-------+
|  1 | Audi     | 52642 |
|  0 | NULL     |  NULL |
|  2 | Mercedes | 57127 |
+----+----------+-------+
3 rows in set (0.00 sec)

mysql> DELETE FROM Cars;
Query OK, 3 rows affected (0.00 sec)

mysql> SELECT * FROM Cars;
Empty set (0.00 sec)

mysql> LOAD DATA INFILE '/tmp/cars.txt' INTO TABLE Cars FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';
ERROR 1062 (23000): Duplicate entry '0' for key 'PRIMARY'
mysql> SELECT * FROM Cars;
+----+----------+-------+
| Id | Name     | Cost  |
+----+----------+-------+
|  1 | Audi     | 52642 |
|  0 | NULL     |  NULL |
|  2 | Mercedes | 57127 |
+----+----------+-------+
3 rows in set (0.00 sec)

mysql>

Ich werde mal die Leerzeilen aus der cars.txt löschen.
 
Fehler gefunden.:rolleyes:
Um es mit den Worten eines alten Bekannten/Admins zu sagen: Schuld ist immer der User.
Code:
mysql> SELECT * INTO OUTFILE '/tmp/cars.txt' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n
' FROM Cars;
Query OK, 8 rows affected (0.01 sec)
Es ist der Zeilenumbruch im Newline Zeichen, bin da ausversehen auf die Returntaste gekommen.

Aber mach mir doch mal einen Vorschlag was besser als MySQL wäre, muß natürlich auf gängigen Servern laufen.
 
Hab gerade mal ein wenig überflogen was Google zu Postgre vs. MySQL anbietet. Postgre scheint im Moment besser darzustehen. Aber ich habe wirklich ein Zeitproblem und die Anwendung für die ich MySQL brauche ist wirklich simpel. Dann ist MySQL glaube ich auch besser dokumentiert. Also ich würde gerne bei Postgre ensteigen und gut zu wissen das es diese Datenbank gibt.

Vielleicht werde ich in absehbarer Zeit ein Kundenverwaltung schreiben, dann werd ich Postgre auf jeden Fall versuchen zu benutzen.

Mit Server war Apache gemeint, hätte ich auch schreiben können.

Und nochmal danke für Hilfe.:)
 
Dann ist MySQL glaube ich auch besser dokumentiert.

Nun ja. Also ich halte http://www.postgresql.org/docs/current/interactive/ für ausgesprochen gut. Frei von Werbung oder anderem Gedöns. Statt current im Link kannst auch die Version einsetzen, also 9.1 oder 8.4 oder 9.3, dann landest Du direkt bei der Doku für diese Version. current ist immer die aktuelle, mit devel landest bei der kommenden Version. Auch die ist schon dokumentiert, sobald ein Feature commited ist - die Doku gehört halt zwingend dazu.
Wenn man mal die Doku da quer gelesen hat und den Aufbau kennt, findest einklich immer alles sehr schnell.


Daneben gibt es massig Blogs (gut, bei MySQL gibt es auch einige) und anderes - also die Doku finde ich mehr als ausreichend.


Andreas
 
Womit wir wieder beim madigen Englisch wären.:( Allerdings würde meins da wahrscheinlich doch noch ausreichen.

Ausserdem mache ich gerade einen kompakt MySQL Kurs und das Kompakte ist gerade das was ich brauche. Das Ding hab ich hoffentlich zum WE durch.

Andreas besten Dank noch mal aber heute wirst du mich nicht bekehren.

Gruss,

Michael
 
Werbung:
Zurück
Oben