Zozzo: Primärschlüssel bei REPLACE in MySQL

Hallo,

wenn man in MySQL eine Zeile in iner TAbelle ersetzen möchten, benutzt man ja, REPLACE mit Angabe des Primärschlüssels, ohne den die Anweisung ja keinen Sinn macht.

REPLACE INTO tabelle (a, b, #primärschlüssel, c) VALUES (neu_a,  neu_b, #primärschlüssel, neu_c)

Aber muss ich als Wert (value) AUCH wieder den orginalen Wert des Primärschlüssels angeben, obwohl der doch gar nicht verändert werden DARF? Was passiert, wenn ich dort einen anderen Priärschlüsselwert angebe?
Weiterhin: Welcher Standardwert wird als Primärschlüssel eingetragen, wenn ich den Wert einfach weglasse. Und wie lasse ich den Wert für den Primärschlüssel weg, wenn der in der Zeilenstruktur NICHT am Anfang oder Ende definiert ist, wie im Beispiel oben.

Vielen Dank und Grüsse,
Zozzo

  1. Hi,

    wenn man in MySQL eine Zeile in iner TAbelle ersetzen möchten, benutzt man ja, REPLACE mit Angabe des Primärschlüssels, ohne den die Anweisung ja keinen Sinn macht.

    REPLACE INTO tabelle (a, b, #primärschlüssel, c) VALUES (neu_a,  neu_b, #primärschlüssel, neu_c)

    Aber muss ich als Wert (value) AUCH wieder den orginalen Wert des Primärschlüssels angeben, obwohl der doch gar nicht verändert werden DARF?

    Was passiert, wenn ich dort einen anderen Priärschlüsselwert angebe?

    Warum liest du das nicht nach?
    http://dev.mysql.com/doc/refman/4.1/en/replace.html

    "REPLACE works exactly like INSERT, except that if an old row in the table has the same value as a new row for a PRIMARY KEY or a UNIQUE index, the old row is deleted before the new row is inserted."

    Also entweder gibst du einen bereits existierenden Wert fuer den PK an - dann wird der Datensatz ersetzt.
    Und wenn nicht - dann wird ein neuer eingefuegt.

    Weiterhin: Welcher Standardwert wird als Primärschlüssel eingetragen, wenn ich den Wert einfach weglasse.

    Der, der auch verwendet werden wuerde, wenn du stattdessen ein INSERT ohne Angabe eines PK-Wertes machst.

    Und wie lasse ich den Wert für den Primärschlüssel weg, wenn der in der Zeilenstruktur NICHT am Anfang oder Ende definiert ist, wie im Beispiel oben.

    In dem du ihn bei den Spalten, die du bei INTO tabelle (...) angibst, auch weglaesst.

    MfG ChrisB

    1. Sorry, Du hast recht. Da stand ich wohl etwas neben mir. Ich gebe ja gar nicht zweimal den Wert den Primärschlüssels an, sondern einmal den Strukturbezeichner und dann den Wert.
      Manchmal sieht man den Wald vor lauter Bäumen nicht....