2012-06-22 107 views
4

MySQL手册状态:如何在没有UNIQUE索引或PRIMARY KEY的MySQL中使用ON DUPLICATE KEY UPDATE?

如果你指定ON DUPLICATE KEY UPDATE,并且插入一行是 将在

,如果你有什么UNIQUE索引或PRIMARY KEY导致重复值一个没有UNIQUE索引或PRIMARY KEY的表,但不想复制列的条目(比如user_id)。

有没有办法在MySQL中做到这一点?

+3

有什么理由,你为什么不设置一个唯一的标识列是唯一索引? – Dancrumb

+0

您最好的选择是为该列添加一个'UNIQUE'索引。 – hafichuk

+2

如果你有没有主键的表,那么在你做其他事情之前必须先解决这个问题。 – HLGEM

回答

4
INSERT INTO `table` (value1, value2) 
SELECT 'stuff for value1', 'stuff for value2' FROM `table` 
WHERE NOT EXISTS (SELECT * FROM `table` 
        WHERE value1='stuff for value1' AND value2='stuff for value2') 
LIMIT 1 

来源:How to 'insert if not exists' in MySQL?

+2

我的情况是相同的,但我想要的是如果记录存在然后更新该记录,是否有可能没有唯一的主键 – pitu

1

如果你希望数据库来控制数据的完整性,那么唯一索引只需要创建该数据UNIQUE约束的MySQL的方式。

如果您不希望数据库负责数据完整性,则需要通过其他方式(通过应用程序或ETL代码)控制数据。通常这将涉及事先扫描表以验证该值不存在,然后执行插入。

对于您要做的事情有一个更清晰的问题,我们可以帮助提供更好的答案。

0

试试这个:

INSERT INTO `table` (userid) 
SELECT 'value for userid' FROM `table` 
    WHERE userid = 'value for userid' HAVING count(*) = 0 
相关问题