0

我正在尝试将新行插入到 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
4

3 回答 3

1

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

通过这种方式,您可以确保id每一行都有一个唯一的值。

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

这是有关您要实现的目标的好读物。

于 2013-11-03T09:59:37.877 回答
0

你可以使用这样的东西

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

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

于 2013-11-03T09:57:17.943 回答
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

于 2013-11-03T10:14:28.140 回答