[MySQL] ON DUPLICATE KEY UPDATE - ignoriert

Steusi

Nasenbär
Hallo Leute,
ich habe gerade das Phänomen, das bei einem Wert kein Update und kein INSERT erfolgt.

Mein Vorhaben ist es Rechner inkl. MAC und IP zu speichern.
Dazu habe ich zwei Query's:
1) Hier erfolgt der Import vom PC-Namen und dem OS, dass klappt auch mit dem OS-Update.
Hinweis: pc_name = UNIQUE
SQL:
INSERT INTO pc
                       (pc_name,
                       pc_os)
                    VALUES
                       ('ADMINBOOK',
                       'Win XP')
                    ON DUPLICATE KEY UPDATE pc_os = 'Win XP'

2) Klappt nicht, der Primärschlüssel erstreckt sich über 3 Spalten:
pcmac_id, pcmac_pcid, pcmac_mac
Da die MySQL-Methode nicht immer mit mehreren Indizes klar kommt.
Hinweis: pcmac_mac = Mac-Adresse kann nicht allein als UNIQUE deklariert werden, da diese Werte auf Grund von virtuellen Maschinen öfter vor kommt.
SQL:
INSERT INTO pcmac
                            (pcmac_pcid,
                            pcmac_mac,
                            pcmac_ip)
                       VALUES
                            ((SELECT pc_id
                            FROM pc
                            WHERE pc_name = 'ADMINBOOK'),
                            'xx:xx:xx:xx:xx:xx',
                            '192.168.111.1')
                       ON DUPLICATE KEY UPDATE pcmac_ip = '192.168.111.1'
Ein neuer Import erfolgt allerdings auch nicht, hat jemand einen Rat, wie der Query korrekt lauten muss?
 
Zuletzt bearbeitet von einem Moderator:
Das problem ist mMn, dass du den Key selber anpassen willst. Das Feld pcmac_ip ist bestandteil vom Schlüssel.

Nachtrag: Habs getestet - geht solange der neue Schlüssel eindeutig ist

Nachtrag2: Dein Update macht keinen Sinn.
Füge etwas ein mit der IP-Adresse XY. Bei doppeltem Schlüssel (inkl. IP XY) setze IP auf XY.
 
Zuletzt bearbeitet:
OK, ohne Angabe der Tabellenstruktur kann man sich schnell verlesen, deshalb reiche ich es einmal nach:

Code:
pcmac_id 	pcmac_pcid 	pcmac_mac 	 	 	pcmac_ip
 	1 	 	1 	 	 	xx:xx:xx:xx:xx:01 	192.168.1.1
	2 	 	1 	 	 	xx:xx:xx:xx:xx:02 	192.168.2.1
	3 	 	1 	 	 	xx:xx:xx:xx:xx:03 	192.168.3.1
Code:
PRIMARY 	
pcmac_id
pcmac_pcid
pcmac_mac

Also, du siehst pcmac_ip gehört nicht zum Schlüssel.

Aber ich habe meinen Denkfehler erkannt, durch meinen laufenden Index kommt es ja nie zu einem "DUPLICATE KEY".
Also muss die Struktur folgendermaßen aussehen:
Code:
pcmac_pcid 	pcmac_mac 	pcmac_ip
PRIMARY 	PRIMARY

Nur stellt sich mir eine weitere Frage.
Was passiert, wenn eine Netzwerkkarte getauscht wird, dann gibt es einen neuen Eintrag mit einer IP, welche schon in der Datenbank erfasst ist. 2 Möglichkeiten fallen mir ein, was meint ihr?
a)
ich setze pcmac_ip auf UNIQUE und behandle einen Importfehler mit einem UPDATE der MAC
b)
ich prüfe im Anschluss an den Import, ob 2 identische IP's vorhanden sind und lösche die Falsche, nur ist die Identifikation etwas komplizierter.
 

Neue Beiträge

Zurück