Вставить процедуру 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 ;

SQL Fiddle demo

Если вы создаете уникальный индекс для 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);

Другие вопросы по тегам