АКТУАЛИЗИРАНЕ: Имайте предвид, че трябва да използвате IF EXISTS
вместо IS NULL
както е посочено в оригиналния отговор.
Код за създаване на съхранена процедура за капсулиране на цялата логика и проверка дали съществуват аромати:
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 ;
ОРИГИНАЛ:
Можете да използвате този код. Той ще провери за съществуването на конкретен запис и ако наборът от записи е NULL, тогава ще премине през и ще вмъкне новия запис вместо вас.
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;
Малко съм ръждясал по моя MySQL синтаксис, но този код трябва поне да ви доведе до по-голямата част от пътя, вместо да използвате ON DUPLICATE KEY.