问题描述
|
我需要做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
查询开始交易
进行查询
根据这些查询的结果,执行COMMIT
或ROLLBACK
查询。
要检测查询是否成功,您确实可以检查ѭ7ѭ的返回值:如果发生错误,它将返回false
。
注意:MySQL是旧的扩展-它没有处理事务的功能;这意味着您必须将它们作为常规查询来处理。
使用MySQLi,您可以使用:
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