使用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;
答案 0 :(得分:3)
我怀疑它是以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