我查看了MySQL重复密钥,但无法弄明白。
我有一张如下表:
id series chapter path(can be unique)
我只想插入数据而不是更新。假设我有以下数据:
seri:火影忍者,klasor:567 ==>如果这两个都存在于表中,则不要插入。
seri:火影忍者,klasor:568 ==>如果火影忍者存在但568不存在则插入。
我怎样才能做到这一点?
答案 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
)
希望这会有所帮助..