我正在尝试执行以下查询:

INSERT INTO table_listnames (name, address, tele)
VALUES ('Rupert', 'Somewhere', '022')
WHERE NOT EXISTS (
    SELECT name FROM table_listnames WHERE name='value'
);

但是这会返回一个错误。基本上我不想插入一个记录,如果记录的“名称”字段已经存在于另一个记录-如何检查新名称是否唯一?


当前回答

INSERT IGNORE INTO `mytable`
SET `field0` = '2',
`field1` = 12345,
`field2` = 12678;

这里的mysql查询,即插入记录,如果不存在,将忽略现有的类似记录。

----Untested----

其他回答

您正在插入而不是更新结果。 您可以在主列中定义名称列或将其设置为惟一的。

MySQL提供了一个非常可爱的解决方案:

REPLACE INTO `table` VALUES (5, 'John', 'Doe', SHA1('password'));

非常容易使用,因为您已经声明了一个唯一的主键(这里的值为5)。

Brian Hooper: 你差不多说到点子上了,但是你的语法有个错误。你的插入永远不会起作用。我测试了我的数据库,这是正确的答案:

INSERT INTO podatki (datum,ura,meritev1,meritev1_sunki,impulzi1,meritev2,meritev2_sunki,impulzi2)
            SELECT '$datum', '$ura', '$meritve1','$sunki1','$impulzi1','$meritve2','$sunki2','$impulzi2'
                FROM dual
                WHERE NOT EXISTS (SELECT datum,ura
                                      FROM podatki
                                      WHERE datum='$datum' and ura='$ura'

这是y表的例子。插入几乎和Bian Hooper写的一样,除了我把select FROM DUAL ont从其他表中放出来。 向你致意,伊凡

INSERT IGNORE INTO `mytable`
SET `field0` = '2',
`field1` = 12345,
`field2` = 12678;

这里的mysql查询,即插入记录,如果不存在,将忽略现有的类似记录。

----Untested----

INSERT不允许语法中的WHERE。

你可以做的是:在字段上创建一个UNIQUE INDEX,它应该是唯一的(name),然后使用:

正常插入(如果名称已经存在,则处理错误) INSERT IGNORE(如果name已经存在,将无声失败,导致警告(而不是错误)) 插入……ON DUPLICATE KEY UPDATE(如果名称已经存在,将在末尾执行UPDATE,请参阅文档)