2015-11-02 90 views
0

我有一个表,有一个自动递增的ID PK,和其他列,其上有一个非唯一索引的列,但其中有数据我知道它是唯一的,名为column4。更新非密钥索引列时INSERT或UPDATE MySQL?

是否有可能做一个

(INSERT if column4="this_data") or (UPDATE if column4!="this_data") 

或者我最好只是使用两个查询 - 一个SELECT来获得行的PK ID,其中column4 =“this_data”,然后是INSERT或UPDATE一次,我知道该行是否存在?

感谢您的时间和帮助。

+1

http://dev.mysql.com/doc/refman/5.0/ en/insert-on-duplicate.html检查此链接 –

+0

为什么不添加唯一密钥? – Arth

+0

仅当用户属于特定类型时,该列才保存用户标识符 - 对于其中所有其他用户,我在此处具有零,这意味着我无法拥有唯一的索引。因此,5行中该列中的数据示例可能为0,0,343555,0,0。其实,我应该用NULL替换零吗?你可以在独特的索引列中有多个空值? – Shaun

回答

0

使用INSERT对重复密钥更新

INSERT INTO table (col) 
VALUES ('$val') 
ON DUPLICATE KEY UPDATE col=col+1; 

或者你可以尝试: -

INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) 
ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b); 

More details

+0

谢谢Rahautos。这是行不通的,因为它们可以像设置索引一样具有多行,所以ON DUPLICATE KEY不会被触发。 – Shaun

+0

这依赖于具有唯一键的列,其中OP明确表示,它不 – Arth

+0

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html –