【问题标题】:Get primary key column value of last inserted record in mysql获取mysql中最后插入记录的主键列值
【发布时间】:2016-05-31 13:26:01
【问题描述】:

我想根据最后插入的记录捕获列的主键值。下面是表结构:

create table test
(
id varchar(100) not null primary key,
rmain varchar(100),
rpart bigint
);

存储过程:

Delimiter $$

    DROP PROCEDURE IF EXISTS insTest$$
    Create Procedure insTest()
    Begin
    Set @rmain := (select trim(concat('DNB', DATE_FORMAT(CURRENT_DATE(), '%y'), DATE_FORMAT(CURRENT_DATE(), '%m'))));

        IF ((trim(DATE_FORMAT(CURRENT_DATE(),'%m')) = 01) OR (trim(DATE_FORMAT(CURRENT_DATE(),'%m')) = 1)) THEN
            Set @rpart = 1;
        END IF;

        IF ((trim(DATE_FORMAT(CURRENT_DATE(),'%m')) != 01) OR (trim(DATE_FORMAT(CURRENT_DATE(),'%m')) != 1)) THEN
            Set @rpart := (select coalesce(max(rpart),0) from test) + 1;
        END IF;

        insert into Test (ID, rmain, rpart) values (concat(@rmain,@rpart),@rmain,@rpart);
    End$$
    DELIMITER ;

请指教。我检查了last_insert_ID(),但它仅适用于具有auto_increment 设置的主键列。提前谢谢...

【问题讨论】:

  • 正确标记您的问题。 mysqltsql 不一样。

标签: mysql


【解决方案1】:

为什么?如果您收到select max(id) 或收到select id from tbl1 order by id desc limit 1 怎么办?

Transaction In MySQL。另外,将事务隔离级别设置为READ COMMITTED

declare last_id INT;
START TRANSACTION;
INSERT INTO tbl1(id,col1,col2) values(1001,'test','test');
SELECT last_id = id FROM tbl1 ORDER BY id DESC LIMIT 1
COMMIT;

【讨论】:

  • 在并发插入期间,您认为这会起作用吗?我想捕获存储过程插入的ID
  • 是的……当然;为什么不将它们包含在显式事务块中?
  • 怎么做?请指教,示例代码真的很有帮助
【解决方案2】:
INSERT INTO test (a,b,c) values (1,2,3);
SELECT LAST_INSERT_ID();

这样你就可以访问最后插入的id

【讨论】:

  • 如果你执行多个语句(在不同的表上),它总是返回最后一个的id。
猜你喜欢
  • 2012-09-02
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 2011-09-11
  • 1970-01-01
相关资源
最近更新 更多