使用PHP,我在MySQL数据库中插入一条记录。如果记录是新的,我会得到insert_id,但如果它已经存在,我无法使用单个查询获得id。
以下两个查询都允许我添加记录或跳过(如果它已经存在):
INSERT INTO `emails` (`email`) VALUE ('abc@example.com') ON DUPLICATE KEY UPDATE `id`=`id`
INSERT IGNORE INTO `emails` (`email`) VALUE ('abc@example.com')
在这两种情况下,获得正确结果的正确方法是什么?
编辑:以下是我的表格语法:
CREATE TABLE `emails` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`email` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我怀疑最终在INSERT_ID中的是LAST_INSERT_ID的值。
引用MySQL手册;
要使LAST_INSERT_ID()对更新有意义,请按如下方式插入行:
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3;
来源:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html