除非其中一个值与另一行匹配,否则插入新行?

时间:2013-11-03 09:51:35

标签: mysql sql

我正在尝试将新行插入MySQL表中,但前提是我插入的其中一个值不在表中已经存在的行中。

例如,如果我正在做:

insert into `mytable` (`id`, `name`) values (10, `Fred`)

我希望能够检查表中的任何其他行是否已经name = 'Fred'。怎么办呢?

谢谢!

修改

我尝试了什么(不能发布确切的声明,但这里是一个表示):

INSERT IGNORE INTO mytable (`domain`, `id`) 
VALUES ('i.imgur.com', '12gfa')
WHERE '12gfa' not in (
    select id from mytable
)

抛出错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE '12gfa' not in ( select id from mytable)' at line 3

3 个答案:

答案 0 :(得分:1)

首先,您的id字段应为autoincrement,除非它是外键(但我不能从您在问题中插入的代码中假设它)。

通过这种方式,您可以确保为每行id提供唯一值。

如果不是这种情况,您应该为表格创建一个主键,其中包含 ALL 您不想复制的字段并使用INSERT IGNORE命令。

Here's a good read关于你想要实现的目标。

答案 1 :(得分:0)

你可以使用这样的东西

INSERT INTO someTable (someField, someOtherField)
VALUES ("someData", "someOtherData")
ON DUPLICATE KEY UPDATE someOtherField=VALUES("betterData");

这将插入一个新行,除非已经存在一个带有重复键的行,它将更新它。

答案 2 :(得分:0)

DELIMITER |
CREATE PROCEDURE tbl_update (IN id INT, IN nm VARCHAR(15))
BEGIN
DECLARE exst INT;
SELECT count(name) INTO exst FROM mytable WHERE name = nm;
IF exst = 0 THEN
     INSERT INTO mytable VALUES(id, name);
END IF;
END
|
DELIMITER ;

或只是将属性名称设为UNIQUE