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

Mysql:从尝试插入中获取ID的最有效方法?,mysql,sql,Mysql,Sql,我正在插入一些_数据(一个唯一的键列),然后在一个单独的语句(未显示)中使用生成的用户id(主键自动递增列) 将忽略插入用户(某些_数据)值(“测试”); 选择最后一个插入ID() 从 不是一个被忽视的人,但可能完成这项工作 编辑: 为了清楚起见,这将使用some\u val更新some\u col,然后设置最后一个插入ID以返回重复行的ID 如果您不想更新副本上的任何数据,而只需设置LAST\u INSERT\u ID()调用以提供所需内容,也可以这样做: INSERT INTO users

我正在插入
一些_数据
(一个唯一的键列),然后在一个单独的语句(未显示)中使用生成的
用户id
(主键自动递增列)

将忽略插入用户(某些_数据)值(“测试”);
选择最后一个插入ID() 从

不是一个被忽视的人,但可能完成这项工作


编辑:

为了清楚起见,这将使用
some\u val
更新
some\u col
,然后设置最后一个插入ID以返回重复行的ID

如果您不想更新副本上的任何数据,而只需设置
LAST\u INSERT\u 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 ;

呃。。。。(1) 我不知道id。(2)如果钥匙是重复的,那不是会将id设置为0吗?查看此帖子:这似乎也是你的问题。请看涂鸦/小提琴。在上述语法之后执行
SELECT LAST\u INSERT\u ID()。1) 我知道,这是因为语法。2) 自尝试插入后,自动_增量发生碰撞,然后在内部捕获重复项。使用
DECLARE ERROR HANDLER…
时也会发生同样的情况,就像他在这里使用的那样:啊,谢谢。我不知道。我试试这个程序。谢谢。
INSERT INTO users ( user_name ) VALUES ( 'bobloblaw' )
   ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID( 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 ;