2011-09-15 107 views
0

我不太熟悉MySQL。但出于性能方面的原因,我想避免检查一行是否已经存在。目前,我有一个表2列(NUM,计数等),我做这样的事情:MySQl:在更新之前触发插入,如果不存在

SELECT num FROM numbers WHERE num = 123 

那么如果行存在......

UPDATE numbers SET count = count + 456 WHERE num = 123 

否则,如果没有行存在..

INSERT INTO numbers (num, count) VALUES (123, 456) 

是否有避免总是查询表的可能性。就像一个触发器...最后,我只是想做一个更新,以便自动完成插入。在此先感谢

+1

您是否选中了“插入...重复密钥更新”http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html – rrehbein

回答

2

你不需要使用触发器,所有你需要做的就是UNIQUE约束添加到您的num列,然后:

INSERT INTO numbers SET num = 123, count = 456 ON DUPLICATE KEY UPDATE count = count + 1; 

另外,不要使用列名的保留字如COUNT。

+0

是否也适用于多插入插入操作? – bobby

+0

你的意思是批量插入?我不是100%肯定的,但我会说这是确实的(我现在也没有时间去尝试确认)。 –

+0

是的,我的意思是批量插入 – bobby

相关问题