bil*_*rky 5 php mysql mysqli transactions
我正在阅读有关mysql事务的内容,我认为你必须使用mysqli或PDO才能创建事务.但是,我看到所有使用mysql扩展的堆栈交换和其他站点示例如下:
mysql_query("START TRANSACTION");
$rollback=0
if (!mysql_query($query1)){
$rollback=1
}
if (!mysql_query($query2)){
$rollback=1
}
if (!mysql_query($query3)){
$rollback=1
}
if ($rollback == 1){
mysql_query("ROLLBACK");
}
else{
mysql_query("COMMIT");
}
Run Code Online (Sandbox Code Playgroud)
这样做和使用"特殊"mysqli特定函数mysqli :: rollback和mysqli :: commit之间有什么区别?
此外,如果php脚本崩溃(IE我的应用服务器崩溃等)会发生什么,DB服务器是否会在设定的时间段后自动回滚事务?
同样,如果DB服务器在mysql_query("COMMIT")之前崩溃会发生什么?交易会被"回滚"吗?
谢谢!
它也是完全合法的,并且直接使用MySQL语句来实现事务.
坦率地说,我没有看到使用mysqli语法的任何改进.这是一个失败的抽象,因为它只在MySQL上以1:1映射.在PDO中使用更高级别的语法会更有意义,因为它将根据底层数据库使用不同的语法进行映射.
然而,正如Hakre所说:mysqli是首选 for performance and interoperability reasons, it's the recommended mysql lib in PHP.
同样,如果DB服务器在mysql_query("COMMIT")之前崩溃会发生什么?交易会被"回滚"吗?
应用程序崩溃比使用DB服务器更容易.任何未提交的事务都将被回滚.
还可以回滚事务,因为它无法在特定超时内获取锁定.
在放弃之前InnoDB事务可能等待行锁定的超时(以秒为单位).默认值为50秒.尝试访问由另一个InnoDB事务锁定的行的事务将在发出以下错误之前最多挂起这么多秒:
ERROR 1205(HY000):超出锁定等待超时; 尝试重新启动事务
| 归档时间: |
|
| 查看次数: |
648 次 |
| 最近记录: |