MySQL - Bedingtes Einfügen (Überprüfung von zwei Spalten)

_dome

Grünschnabel
Hallo zusammen,

ich möchte erst einen Datensatz einfügen, wenn ich überprüft habe ob dieser Datensatz noch nicht existiert.

Hier ein Bild der Tabelle:
sql.png

Wie man sieht besteht sie aus einer ID, dem Primarykey und dann zwei Foreignkeys.
Ich will einen neuen Datensatz nur dann einfügen, wenn FK_Akku und FK_Bikemodell noch nicht in der gleichen Kombination eingetragen sind.

Wenn nun z.B. nun ID_Akku_Bikemodell 8 mit den Werten für FK_Akku -> 7 und FK_Bikemodell 8 (oder auch 7) eingetragen werden soll, soll dieser Eintrag nicht gemacht werden, da schon vorhanden.

Mein querrystring ist momentan:
Code:
 query = "replace Akku_Bikemodell set  FK_Akku+"="+akku_id+", FK_Bikemodell="+bikemodell.get_ID();

Hoffe ich hab mein Problem genau genug beschrieben.

Gruß
_dome
 
Wenn Sie das Schlüsselwort IGNORE angeben, werden Fehler, die während der Ausführung der INSERT-Anweisung auftreten, als Warnungen behandelt. So würde beispielsweise ohne IGNORE ein Datensatz, der einen vorhandenen eindeutigen Index oder einen Primärschlüsselwert in der Tabelle dupliziert, einen Dublettenfehler verursachen, woraufhin die Anweisung abgebrochen würde. Bei IGNORE wird der Datensatz zwar auch nicht eingefügt, aber es wird kein Fehler ausgegeben.

Alos, einen Eindeutigen Index auf die 2 Felder setzen und dann so abfüllen:

SQL:
INSERT IGNORE INTO Akku_Bikemodel
(FK_Akku, FK_Bikemodel)
VALUES(123, 456)
 
Zuletzt bearbeitet von einem Moderator:
Alos, einen Eindeutigen Index auf die 2 Felder setzen und dann so abfüllen:

Soll ich also aus dem Primarykey welcher momentan eine einfache ID ist einen zusammengesetzten Primarykey aus den beiden Foreignkeys machen. Oder wie darf ich das verstehen?


Edit:
Ne das bringt nichts. Wie kann ich einen eindeutigen Index auf die zwei Felder setzen? Steh grad etwas auf dem Schlauch.


Gruß
_dome
 
Zuletzt bearbeitet:
Dieses Statement bringt mir den Datensatz. Wenn diese Abfrage erfolgreich ist darf kein neuer Datensatz hinzugefügt werden (da dieser Datensatz schon vorhanden ist):

Code:
SELECT ID_Akku_Bikemodell from Akku_Bikemodell
WHERE FK_Akku = 1 and FK_Bikemodell = 5


Kann ich jetzt nicht etwas machen wie (Pseudocode):
Code:
if( [code von oben] = null) then (insert [neuer Datensatz])


Gruß
_dome
 
Zuletzt bearbeitet:
Danke es passt.

Ich hab nun folgendens gemacht:

Code:
ALTER TABLE `Akku_Bikemodell` ADD UNIQUE (`FK_Akku` ,
`FK_Bikemodell` 
);
und diesen insert-Befehl:
Code:
INSERT ignore INTO `Akku_Bikemodell`(`FK_Akku`, `FK_Bikemodell`) VALUES (1,5)


Ohne ignore wirft er eine Fehlermeldung.


PS: Ich wusste bisher nicht, dass sich unique auf mehere Spalten zusammen anwenden lässt -> sehr praktisch :D


Danke für die Hilfe. Hat ne Weile gedauert, bis ich es kapiert habe :)

Gruß
_dome
 

Neue Beiträge

Zurück