在数据库表里增加一条数据后,有没有办法直接获取自动编号的那个ID,而不是重新查询一下所增加的那条数据呢?
或者,能否同时在2张表插入数据,表1的自动编号 key1 就是表2的一个字段 key_a1.

解决方案 »

  1.   

    如果是MS SQL的话可用
    INSERT INTO TABLE ....
    SELECT  @@IDENTITY
      

  2.   


    我用的是 MySQL 数据库
      

  3.   

    MySQL 数据库也是可以取得數據的
    根据MySQL的官方说明,是使用LAST_INSERT_ID()这个函数,LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变。一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的。但在多线程情况下,就不行了。在多用户交替插入数据的情况下max(id)显然不能用。这就该使用LAST_INSERT_ID了,因为LAST_INSERT_ID是基于Connection的,只要每个线程都使用独立的Connection对象,LAST_INSERT_ID函数将返回该Connection对AUTO_INCREMENT列最新的insert or update操作生成的第一个record的ID。这个值不能被其它客户端(Connection)影响,保证了你能够找回自己的 ID 而不用担心其它客户端的活动,而且不需要加锁。用MySQL命令行测试,结果是正确的,但是使用MySQL Query Browser测试时,LAST_INSERT_ID返回了全部的id值。可能是软件的问题,跟MySQL无关。另外,如果你有一次有多行记录插入时,LAST_INSERT_ID只返回第1个,
    例如:
    INSERT INTO dede_archives(typeid,description) 
    VALUES (222, 'Mary') , (333, 'Jane') , (444, 'Lisa');
    一次插入3行记录,假设此时生成的id是4,5,6三个,但是用LAST_INSERT_ID只能返回4因此,对于批量插入时的处理,你要结合使用ROW_COUNT()来判断插入的记录数
    INSERT INTO dede_addonarticle(id,typeid,body)
    SELECT id,typeid,description
    FROM dede_archives
    WHERE id>=LAST_INSERT_ID() AND id <=LAST_INSERT_ID()+ROW_COUNT()