如果外键不存在,则插入MySql过程

时间:2014-09-19 17:34:23

标签: mysql stored-procedures if-statement equals

首先,我的英语不是那么好,但我认为可能是enogh。好的,我有一个插入程序。

程序

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');

照片表是
ID Dosya UyeID
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 个答案:

答案 0 :(得分:0)

尝试替换照片(Dosya,UyeID)VALUES(foto,uid);

答案 1 :(得分:0)

可替换地:

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

答案 2 :(得分:0)

如果在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,也可以使用批量插入