Вставить процедуру MySql, если внешний ключ не существует
Во-первых, мой английский не очень хорош, но я думаю, может быть, достаточно. Хорошо, у меня есть процедура для вставки.
Процедура
CREATE PROCEDURE `PhotoUpdate`(IN `uid` INT, IN `foto` VARCHAR(255))
BEGIN
INSERT INTO photos (Dosya, UyeID)
VALUES (foto, uid)
ON DUPLICATE KEY UPDATE UyeID = uid;
END
И я называю это так
Call PhotoUpdate(87,'87_54284.jpg');
Фотографий стол
Ид Дося УеИД
1 55_48615.jpg 55
2 87_95165.jpg 87
Я пытаюсь ('uid'->87), если uid равен photos.UyeID, я имею в виду, если UyeID=87, то Обновить строку. Если еще, то вставьте.
Это спрашивает, что я пытаюсь. Но не сработало.
IF EXISTS (SELECT ID FROM photos WHERE UyeID = uid)
UPDATE photos SET Dosya = foto WHERE UyeID = uid;
ELSE
INSERT INTO photos (Dosya, UyeID) Values(foto, uid);
END IF;
Как я могу это сделать, ребята?
3 ответа
Решение
В качестве альтернативы:
DELIMITER $$
DROP PROCEDURE IF EXISTS `PhotoUpdate`$$
CREATE PROCEDURE `PhotoUpdate`(`uid` INT UNSIGNED, `foto` VARCHAR(255))
BEGIN
INSERT INTO `photos` (`Dosya`, `UyeID`)
VALUES (`foto`, `uid`)
ON DUPLICATE KEY UPDATE `Dosya` = `foto`;
END$$
DELIMITER ;
Если вы создаете уникальный индекс для UyeID или, что еще лучше, избавляетесь от столбца ID и делаете UyeID первичным ключом, вы можете использовать INSERT .... ON DUPLICATE KEY UPDATE.
пример
INSERT INTO photos (Dosya, UyeID)
VALUES ('example.jpg', 87)
ON DUPLICATE KEY UPDATE
Dosya = VALUES(Dosya)
Если вы используете VALUES, вы можете использовать это также с массовой вставкой
Попробуйте ЗАМЕНИТЬ В ФОТОГРАФИИ (Dosya, UyeID) VALUES(фото, uid);