2

我有一个 MySQL 表,它有一个两列主键,后者在以前是 MyISAM 时是自动递增的。当我将它切换到 InnoDB 时,我必须将 auto_increment 列转换为普通的 int,该 int 使用插入前触发器将自身更新为 max()+1。目前没有问题。。

进行插入的Java PreparedStatement 需要知道刚刚插入的行的last_insert_id,并且不需要Oracle/etc 的RETURNING 功能。我不确定如何最好地检索该值。有没有办法在不将所有插入函数包装到存储函数或需要第二次查询的情况下获得模拟的自动增量值?

仅供参考,大致如下(只是写出来,所以可能并不完美,但它应该让这个想法得到理解):

创建表 t (
  id1 int 非空,
  id2 int NOT NULL DEFAULT '0',
  主键(id1,id2)
) 引擎=InnoDB;
分隔符 $$
CREATE TRIGGER t_auto_increment BEFORE INSERT ON t
每一行
开始
    SET NEW.id2 = (SELECT MAX(id2)+1 FROM t WHERE id1=NEW.id1);
结束$$
分隔符;

我知道对于其他数据库引擎,我可以告诉它使用插入查询返回 id2,我认为这可以解决我的问题,但 MySQL 似乎不支持这一点。我宁愿不做一些存储函数来包装每个插入,所以我想到的最好的方法是设置一个变量并在之后查找它..虽然我更喜欢不需要第二个的东西查询服务器,当然,尽管说查询会很轻。

4

0 回答 0