mysql:transaction?插入和更新

时间:2011-04-17 14:08:04

标签: php mysql transactions

我需要做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 ...");
}

在这种情况下我应该使用交易吗?我该怎么用呢? 或者我可以保留这么简单吗?

由于

2 个答案:

答案 0 :(得分:2)

如果您想要一些“全有或全无”的行为,通常会使用交易。

基本上,对于交易,您可以:

  • 开始交易
  • 执行第一次查询
  • 如果成功,请执行第二个查询
    • 如果成功,则提交交易
    • 否则,回滚事务 - 取消与该事务对应的两个查询。


如果使用mysql_*功能,则必须:

  • 使用START TRANSACTION查询
  • 启动交易
  • 查询
  • 根据这些查询的结果,执行COMMITROLLBACK查询。

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

注意:MySQL是旧的扩展 - 并且没有处理事务的功能;这意味着你必须将它们作为常规查询处理。


使用MySQLi,您可以使用:

答案 1 :(得分:1)

对于插入和更新,MySQL有一个很好的替代解决方案 - “ON DUPLICATE KEY UPDATE”。它可以在一个查询中安全地执行您想要的操作:

INSERT .... ON DUPLICATE KEY UPDATE

(在这种情况下,密钥也必须设置为唯一)

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