mysql:事务?插入和更新


mysql: transaction? insert and update

我需要做2个查询。

基本上就是

mysql_query("INSERT INTO table ($value1,$value2)");

mysql_query("UPDATE table2 SET field1 = '$value1', field2 = '$value2'");

我想我可以简单地做一个

if (mysql_query("INSERT ...") !== false) {
   mysql_query("UPDATE ...");
}
在这种情况下,我应该使用事务吗?我应该如何使用它?
或者我能留下这个简单的如果吗?

谢谢

如果你想要一些"全有或全无"的行为,你通常会使用事务。

基本上,对于事务,您可以:

  • 启动事务
  • 执行第一个查询
  • 如果成功,执行第二个查询
    • 如果成功,提交事务
    • 否则,回滚事务——取消与该事务对应的两个查询。


如果使用mysql_*函数,则必须:

  • 启动事务,使用START TRANSACTION查询
  • 查询
  • 根据这些查询的结果,要么做COMMITROLLBACK查询。

要检测查询是否成功,您确实可以检查mysql_query()的返回值:如果出现错误,它将返回false

注意:MySQL是旧的扩展——并且没有处理事务的函数;这意味着你必须把它们作为常规查询来处理。


使用mysql,你可以使用:

  • mysqli::autocommit()禁用自动提交
  • mysqli::commit()mysqli::rollback()

对于插入和更新,MySQL有一个很好的替代解决方案- "ON DUPLICATE KEY UPDATE"。它在单个查询中安全地完成了您想要的功能:

INSERT .... ON DUPLICATE KEY UPDATE

(在此场景中键必须设置为唯一)

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html