我插入后可以立即使用数据库值吗?

时间:2010-06-30 01:08:22

标签: php mysql database asynchronous

我可以使用PHP将内容插入到MySQL数据库中,然后立即调用访问它,或者是插入异步(在这种情况下,数据库在查询之前没有完成插入值的可能性)?

4 个答案:

答案 0 :(得分:2)

如果在事务中插入了值,则在提交原始事务之前,任何其他事务都无法访问该值。除此之外,它应该在您提交之后至少“很快”可访问。

答案 1 :(得分:2)

通常有两种使用MySQL的方式(以及大多数其他SQL数据库):

  1. 事务。您启动一个事务(隐式或通过发出类似'BEGIN'之类的东西),发出命令,然后显式提交事务,或者将其回滚(在切断数据库连接之前未采取任何操作将导致自动回滚)

  2. 自动提交。每个语句在发布时自动提交给数据库。

  3. 默认模式可能会有所不同,但即使您处于自动提交模式,也只需发出BEGIN即可“切换”到事务处理。

    如果您正在以事务方式运行,则对数据库所做的任何更改都将是数据库连接/实例的本地更改,直到您发出提交为止。发出提交应该阻塞,直到事务完全提交,所以一旦它返回没有错误,你可以假设数据在那里。

    如果您在自动提交中运行(并且您的数据库库没有做一些非常奇怪的事情),那么只要插入数据的调用返回,您就可以依赖刚刚输入的数据。

    请注意,最佳做法是始终以交易方式运营。即使你只发出一个单一的原子语句,也养成正确的BEGINing和COMMITing事务的习惯。当默认情况下新版本的数据库库切换到事务模式时,它还可以避免麻烦,并且突然间所有单行SQL语句都不会被提交。 :)

答案 2 :(得分:2)

我认为OP所要求的是:

<?
  $id = $db->insert(..);
  // in this case, $row will always have the data you just inserted!
  $row = $db->select(...where id=$id...)

?>

在这种情况下,如果执行插入操作,则始终可以使用select访问最后插入的行。即使在这里使用交易,这也不会改变。

答案 3 :(得分:1)

大多数答案都是肯定的。您必须做一些特殊的工作来强制数据库调用以您描述的方式异步,并且只要您在同一个线程中完成所有操作,就应该没问题。

您提出问题的背景是什么?