Mysql:从尝试插入中获取ID的最有效方法?

时间:2014-10-12 20:06:31

标签: mysql sql

我插入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查询,但不确定它是最有效的。

1 个答案:

答案 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 ;