相同的自增ID应该插入到插入查询中。

3

我需要大家的帮助。不知道这是否可能。

在PHP中,当我向数据库插入新查询时,ID值将自动递增。我还有一个变量在该查询中,即parentID

运行查询时,parentID应等于自动递增的ID。

我尝试使用mysqli_insert_id($conn);函数。获取最后一个ID。将其值加一再将该值分配给parentID,然后插入到数据库中。

但有些时候它可能会出现孤立问题。因此,任何人都可以指导提供其他解决方案以避免孤立问题。孤立意味着当我尝试插入时,从数据库中获得最后一个ID。现在将该值分配给ParendID变量。然后我尝试插入到数据库中。假设这可能需要几分钟时间。在这几分钟内,其他人可能会插入他们自己的信息。那时我的最后一个ID将不同。因此,我将使用错误的parendID值进行插入。

请任何人帮助我解决这个问题..!!

<?php
  //My connection 
  $last_id = $conn->insert_id; //get last ID from DB
  $parent_id = $last_id + 1;

  $sql = "INSERT INTO MyGuests (firstname, lastname, email, ParentID)
           VALUES ('John', 'Doe', 'john@example.com', $parent_id)";

  if ($conn->query($sql) === TRUE) {
  echo "New record created successfully.";
  } else {
   echo "Error: " . $sql . "<br>" . $conn->error;
  }

?>

首先,我获取LastID然后将其值加一。然后我将其插入到数据库中。除了这种方法,在查询中,直接可以给出任何其他可能的解决方案来将父ID分配为字段的当前ID吗?


完全不明白你的问题,你有任何代码吗?我认为你是在问如何将自动ID放入多个列中? - Matt The Ninja
只有在同一数据库连接中插入后,才能获取正确的最后插入ID。 - Aleksey Krivtsov
哎呀,谢谢。还有其他的方法吗? - San Ka Ran
没有代码,我们无法帮助您。 - Aleksey Krivtsov
我已经添加了..!!! 谢谢..!! - San Ka Ran
1个回答

1
这可以通过触发器完成,你只需要在插入后将新的id值复制到parentID中即可。
CREATE TRIGGER ins_parentID 
AFTER INSERT ON MyGuests
FOR EACH ROW SET 
NEW.ParentId = NEW.ID;

代码应该长成这样(此代码未经测试)


这会不会造成任何隔离问题? - San Ka Ran
隔离问题?不确定这段代码是否正确,但是应该是这样做的。每次添加新记录时,它会自动填充最后一列。 - Himanshu Vaishnav
如果有人在我添加数据库后添加了新列,这段代码会给出我的ID或其他人更新的最后一个ID吗?请假设在几秒钟内会有10条记录添加到数据库中。 - San Ka Ran
MySQL中的新功能是指向当前添加记录的指针。触发器将对每个插入执行,因此new的值应该对每个事务都是原子的。这就是MySQL手册所说的链接 - Himanshu Vaishnav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接