代码之家  ›  专栏  ›  技术社区  ›  Manos Dilaverakis

在mysql事务中保留autoincrement id

  •  0
  • Manos Dilaverakis  · 技术社区  · 15 年前

    我有两个MySQL数据库表,用于保存ESHOP订单的数据。它们是这样构建的(极其简化的版本):

    CREATE TABLE `orders` (
    `id` int(11) NOT NULL auto_increment
    PRIMARY KEY  (`id`)
    );
    
    CREATE TABLE `order_items` (
      `id` int(11) NOT NULL auto_increment,
      `orderID` int(11) NOT NULL,
      PRIMARY KEY  (`id`)
    )
    

    两者之间的关系是orders.id对应于order\u items.order id。

    我正在使用一个事务来下一个新的订单,但是保留上面的关系有一个问题。为了获得新的订单ID,我必须提交ORDERS INSERT查询,获取自动增加的ID,然后为订单项启动另一个事务。这几乎破坏了使用事务的意义。

    我可以在ORDERS表中插入新订单,然后尝试

    INSERT INTO order_items(orderID) VALUES(LAST_INSERT_ID()) 
    

    我想这是可行的。但是,在插入第一个订单项之后 LAST_INSERT_ID() 将停止返回订单ID,而是返回订单项ID,从而无法使用此查询插入其他订单项。

    是否有一种方法可以使整个事务在单个事务中工作,或者我应该放弃并使用一个过程来代替它?

    2 回复  |  直到 15 年前
        1
  •  4
  •   nickf    15 年前

    这行吗?:

    INSER QUERY;
    SET @insertid = LAST_INSERT_ID();
    INSERT INTO `order_items` SET `OrderID` = @insertid;
    

    一言为定。你得仔细检查一下语法

        2
  •  0
  •   junmats    15 年前

    您不能指望最后一个插入的ID(),因为当您插入值以订购项目时,它也会改变,因为它插入的ID也是自动修改的。 也许你可以试试这个。

    INSERT INTO order_items(orderID) VALUES((SELECT id FROM orders ORDER BY id desc LIMIT 1))