UPPDATERING: Observera att du måste använda IF EXISTS
istället för IS NULL
som anges i det ursprungliga svaret.
Kod för att skapa lagrad procedur för att kapsla in all logik och kontrollera om smaker finns:
DELIMITER //
DROP PROCEDURE `GetFlavour`//
CREATE PROCEDURE `GetFlavour`(`FlavourID` INT, `FlavourName` VARCHAR(20))
BEGIN
IF EXISTS (SELECT * FROM Flavours WHERE ID = FlavourID) THEN
UPDATE Flavours SET ID = FlavourID;
ELSE
INSERT INTO Flavours (ID, Name) VALUES (FlavourID, FlavourName);
END IF;
END //
DELIMITER ;
ORIGINAL:
Du kan använda den här koden. Den kommer att kontrollera om det finns en viss post, och om postuppsättningen är NULL kommer den att gå igenom och infoga den nya posten åt dig.
IF (SELECT * FROM `TableName` WHERE `ID` = 2342 AND `Name` = 'abc') IS NULL THEN
INSERT INTO `TableName` (`ID`, `Name`) VALUES ('2342', 'abc');
ELSE UPDATE `TableName` SET `Name` = 'xyz' WHERE `ID` = '2342';
END IF;
Jag är lite rostig på min MySQL-syntax, men den koden borde åtminstone ta dig mest hela vägen dit, snarare än att använda ON DUBLIKATKEY.