Mysql插入如果不存在于两列中

时间:2015-10-29 10:35:46

标签: mysql sql insert-into

我查看了MySQL重复密钥,但无法弄明白。

我有一张如下表:

id   series   chapter   path(can be unique)

我只想插入数据而不是更新。假设我有以下数据:

seri:火影忍者,klasor:567 ==>如果这两个都存在于表中,则不要插入。

seri:火影忍者,klasor:568 ==>如果火影忍者存在但568不存在则插入。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:3)

最简单的方法是在该表上定义具有两列的唯一索引:

ALTER TABLE yourtable ADD UNIQUE INDEX (seri,klasor);

您也可以定义两个列主键,它也可以正常工作。

然后使用INSERT IGNORE仅在不重复时添加行:

INSERT IGNORE INTO yourtable (seri, klasor) VALUES ('Naruto',567);
INSERT IGNORE INTO yourtable (seri, klasor) VALUES ('Naruto',568);

修改:根据评论,您无法使用UNIQUE INDEX,这会让事情变得复杂。

SET @seri='Naruto';
SET @klasor=567;
INSERT INTO yourtable 
 SELECT seri,klasor FROM (SELECT @seri AS seri, @klasor AS klasor)
  WHERE NOT EXISTS (SELECT seri, klasor FROM yourtable WHERE seri=@seri AND klasor=@klasor);

您可以将上述查询与两个局部变量一起使用,或者通过将实际值替换为局部变量将其转换为单个语句。

更好的方法是使用stored procedure

CREATE PROCEDURE yourinsert (vseri VARCHAR(8), vklasor INT)
BEGIN
 DECLARE i INT;
 SELECT COUNT(*) INTO i FROM yourtable WHERE seri=vseri AND klasor=vklasor;

 IF i=0 THEN
  INSERT INTO yourtable (seri,klasor) VALUES (vseri, vklasor);
 END IF;
END;

这将允许您使用:

执行INSERT
CALL yourinsert('Naruto',567);

答案 1 :(得分:2)

INSERT INTO table_name (seri, klasor) VALUES ('Naruto',567)
WHERE NOT EXISTS( SELECT seri,klasor FROM table_name WEHERE seri='Naruto' AND klasor=567
)

希望这会有所帮助..