mysqldump - duplicate entry
mysqldump - duplicate entry
am 23.11.2006 17:26:08 von Thomas Barth
Hi,
ich fühle mich gerade von mysql auf den Arm genommen. Ich erhalte bei
der Kopie einer Datenbanktabelle die Meldung
mysqldump --opt database table -ppw | mysql --compress -u user -ppw
database_cp
ERROR 1062 at line 27: Duplicate entry '1' for key 1
Um dies zu umgehen, möchte ich den mysql mode bestimmen
set sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
und erhalte die Fehlermeldung
ERROR 1064: You have an error in your SQL syntax near 'sql_mode =
'NO_AUTO_VALUE_ON_ZERO'' at line 1
MySQL-Version ist 3.23.54 und sollte sql mode laut Doku kennen
http://dev.mysql.com/doc/refman/4.1/en/server-sql-mode.html
Kann mir gerade mal jemand auf die Sprünge helfen?
Thomas B
Re: mysqldump - duplicate entry
am 23.11.2006 17:37:07 von Daniel Fischer
Thomas Barth!
> ERROR 1064: You have an error in your SQL syntax near 'sql_mode =
> 'NO_AUTO_VALUE_ON_ZERO'' at line 1
>
> MySQL-Version ist 3.23.54 und sollte sql mode laut Doku kennen
>
> http://dev.mysql.com/doc/refman/4.1/en/server-sql-mode.html
Da steht, dass erst 4.1 SET sql_mode kennt.
Gruß
Daniel
Re: mysqldump - duplicate entry
am 23.11.2006 17:51:37 von Thomas Barth
Daniel Fischer wrote:
> Thomas Barth!
>
>> ERROR 1064: You have an error in your SQL syntax near 'sql_mode =
>> 'NO_AUTO_VALUE_ON_ZERO'' at line 1
>>
>> MySQL-Version ist 3.23.54 und sollte sql mode laut Doku kennen
>>
>> http://dev.mysql.com/doc/refman/4.1/en/server-sql-mode.html
>
> Da steht, dass erst 4.1 SET sql_mode kennt.
>
>
Also wäre /etc/init.d/mysql restart --sql-mode='NO_AUTO_VALUE_ON_ZERO'
zulässig?
Thomas B
Re: mysqldump - duplicate entry
am 23.11.2006 22:41:32 von Thomas Barth
Daniel Fischer wrote:
> Thomas Barth!
>
>> ERROR 1064: You have an error in your SQL syntax near 'sql_mode =
>> 'NO_AUTO_VALUE_ON_ZERO'' at line 1
>>
>> MySQL-Version ist 3.23.54 und sollte sql mode laut Doku kennen
>>
>> http://dev.mysql.com/doc/refman/4.1/en/server-sql-mode.html
>
> Da steht, dass erst 4.1 SET sql_mode kennt.
>
>
Wieso legt mysqldump der 3er Version überhaupt Sequenznummern für das
Autoinkrementfeld an, und beginnt dann auch noch mit 0, um dann beim
Einfügen über doppelte Einträge zu stolpern?
Soll ich nun etwa die Sequenzen etwa alle manuell durch NULL ersetzen?
Das würde ja bedeuten, dass ich dann doch erst den mysqldump in eine
Datei leiten muss, um die Ersetzungen vornehmen zu können. Diesen
Schritt möchte ich eigentlich durch das Pipen von mysqldump nach mysql
vermeiden.
Thomas B
Re: mysqldump - duplicate entry
am 24.11.2006 00:14:15 von Axel Schwenke
Thomas Barth wrote:
>
> Wieso legt mysqldump der 3er Version überhaupt Sequenznummern für das
> Autoinkrementfeld an, und beginnt dann auch noch mit 0, um dann beim
> Einfügen über doppelte Einträge zu stolpern?
Die Zeile mit der Null hat MySQL nicht angelegt. Das hast du selber -
bzw. eine Applikation - da rein geschrieben. Evtl. noch bevor das
AUTO_INCREMENT Attribut gesetzt wurde oder indirekt per UPDATE ...
SET id=id-1 WHERE ...
> Soll ich nun etwa die Sequenzen etwa alle manuell durch NULL ersetzen?
Nö. Es reicht, den einen Eintrag mit 0 zu ersetzen.
UPDATE SET =NULL WHERE id=0
Damit bekommt die Zeile jetzt eine id != 0 und wenn du die Daten
noch einmal dumpst, dann kann der Dump auch von einem alten MySQL
eingelesen werden.
XL
Re: mysqldump - duplicate entry
am 24.11.2006 09:13:12 von Thomas Barth
Axel Schwenke wrote:
> Thomas Barth wrote:
>>
>> Wieso legt mysqldump der 3er Version überhaupt Sequenznummern für das
>> Autoinkrementfeld an, und beginnt dann auch noch mit 0, um dann beim
>> Einfügen über doppelte Einträge zu stolpern?
>
> Die Zeile mit der Null hat MySQL nicht angelegt. Das hast du selber -
> bzw. eine Applikation - da rein geschrieben. Evtl. noch bevor das
> AUTO_INCREMENT Attribut gesetzt wurde oder indirekt per UPDATE ...
> SET id=id-1 WHERE ...
>
>> Soll ich nun etwa die Sequenzen etwa alle manuell durch NULL ersetzen?
>
> Nö. Es reicht, den einen Eintrag mit 0 zu ersetzen.
>
> UPDATE SET =NULL WHERE id=0
>
Geht leider nicht, da das Feld mit "unsigned NOT NULL auto_increment"
angelegt wurde.
Thomas B
Re: mysqldump - duplicate entry
am 24.11.2006 11:03:52 von Axel Schwenke
Thomas Barth wrote:
> Axel Schwenke wrote:
>> Thomas Barth wrote:
>>
>>> Soll ich nun etwa die Sequenzen etwa alle manuell durch NULL ersetzen?
>>
>> Nö. Es reicht, den einen Eintrag mit 0 zu ersetzen.
>>
>> UPDATE SET =NULL WHERE id=0
>>
>
> Geht leider nicht, da das Feld mit "unsigned NOT NULL auto_increment"
> angelegt wurde.
- Recht hast du! Ich hatte gehofft, das explizite Setzen auf NULL
würde eine neue AUTO_INCREMENT id erzeugen. Also mußt du den Datensatz
per INSERT ... SELECT kopieren:
INSERT INTO