CẬP NHẬT: Lưu ý rằng bạn cần sử dụng IF EXISTS
thay vì IS NULL
như được chỉ ra trong câu trả lời ban đầu.
Mã để tạo thủ tục được lưu trữ để đóng gói tất cả logic và kiểm tra xem Hương vị có tồn tại hay không:
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 ;
NGUỒN GỐC:
Bạn có thể sử dụng mã này. Nó sẽ kiểm tra sự tồn tại của một bản ghi cụ thể và nếu tập bản ghi là NULL, thì nó sẽ chuyển qua và chèn bản ghi mới cho bạn.
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;
Tôi hơi khó hiểu về cú pháp MySQL của mình, nhưng mã đó ít nhất sẽ giúp bạn thực hiện được hầu hết các bước ở đó, thay vì sử dụng BẬT KHÓA DUPLICATE.