我插入some_data
(唯一键列),然后在单独的语句中使用生成的user_id
(主键自动增量列)(未显示)
INSERT IGNORE INTO users (some_data) VALUES ('test');
SELECT LAST_INSERT_ID(); <--- I do stuff with this.
但是,当然,如果some_data
已经存在(经常发生),LAST_INSERT_ID()
会返回0.根据唯一键{user_id
获取some_data
的最佳方式是什么?{ 1}},在这种情况下?当然我可以做一个单独的WHERE查询,但不确定它是最有效的。
答案 0 :(得分:1)
来自http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
INSERT INTO users ( id, some_col ) VALUES (n,some_val)
ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), some_col=some_val;
不是忽视但是可以做这个工作吗?
编辑:
要清楚,这将使用some_col
更新some_val
,然后设置LAST_INSERT_ID以返回重复行的ID。
如果您不想更新副本上的任何数据,只需设置LAST_INSERT_ID()
调用即可提供您想要的内容,也可以这样做:
INSERT INTO users ( user_name ) VALUES ( 'bobloblaw' )
ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID( id );
编辑2:
使用proc来完成工作并取回id
DELIMITER $$
CREATE PROCEDURE insert_test( val1 varchar(10), val2 varchar(10) )
BEGIN
INSERT INTO test.test_table ( col1, col2 ) SELECT val1, val2 FROM ( select 1 ) as a
WHERE NOT EXISTS (
select 1 from test.test_table t where t.col1 = val1
);
SELECT id FROM test.test_table where col1 = val1;
END $$
DELIMITER ;