条件mySQL语句.如果为true UPDATE,如果为false INSERT

Vit*_*kov 5 php mysql

我正在尝试创建更强大的MySQL查询并在此过程中学习.目前我正在努力掌握ON DUPLICATE KEY语法和可能的用途.

我有一个INSERT查询,我想INSERT只有没有相同ID和名称的记录,否则UPDATE.ID和名称不是,UNIQUEID已编入索引.ID不是UNIQUE因为它引用了另一个表中的另一个记录而我希望在该表中有多个记录来引用另一个表中的一个特定记录.

如何使用ON DUPLICATE KEYINSERT仅当有与没有记录ID和名称已经设置别的UPDATE这个纪录?

我可以很容易地与一对夫妇的做到这一点QUERIES,然后有PHP做的IF ELSE一部分,但我想知道如何LIMITQUERIES我送MySQL.

小智 7

更新:请注意,您需要使用IF EXISTS而不是IS NULL原始答案中指出的.

用于创建存储过程以封装所有逻辑并检查Flavors是否存在的代码:

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 ;
Run Code Online (Sandbox Code Playgroud)

原版的:

你可以使用这段代码.它将检查是否存在特定记录,如果记录集为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;
Run Code Online (Sandbox Code Playgroud)

我的MySQL语法有点生疏,但该代码至少应该让你大部分时间,而不是使用ON DUPLICATE KEY.