我正在阅读有关如何使用数据库类型和数据库引擎的事务的非常详细的教程,但我没有找到一个指导,教我何时以及为什么要使用它们.
我知道交易通常用于银行业务,所以当我们处理货币数据时,我可以想象它们会以许多其他方式使用.
今天我正在编写一个包含INSERT关系数据库的各种语句的页面,我想知道这是否是我应该使用它们的情况之一.
我得到一个印象,我不知道数据可以部分丢失的情况(除了编码器错误),所以我总是担心何时应该使用它们.
有人可以解释或给出这些基本规则的一些链接吗?
我正在使用MySQL 5.0.8.我应该InnoDB用于所有需要交易的表吗?如果是的话,InnoDB比常见的慢,MyISAM但我不应该担心吗?
谢谢
我已经阅读了在线 php 手册,但我仍然不确定这两个函数的工作方式:mysqli::commit 和 mysqli::rollback。
我要做的第一件事是:
$mysqli->autocommit(FALSE);
Run Code Online (Sandbox Code Playgroud)
然后我提出一些疑问:
$mysqli->query("...");
$mysqli->query("...");
$mysqli->query("...");
Run Code Online (Sandbox Code Playgroud)
然后我通过执行以下操作提交由这 3 个查询组成的事务:
$mysqli->commit();
Run Code Online (Sandbox Code Playgroud)
但是,在这些查询之一不起作用的不幸情况下,所有 3 个查询都被取消还是我必须自己调用回滚?我希望所有 3 个查询都是原子的,并且只被视为一个查询。如果一个查询失败,那么所有 3 个查询都应该失败并且没有任何效果。
我问这个是因为在我在手册页上看到的评论中:http : //php.net/manual/en/mysqli.commit.php 如果其中一个查询失败,用户 Lorenzo 会调用回滚。
如果 3 个查询是原子的,回滚有什么好处?我不明白。
编辑:这是我怀疑的代码示例:
<?php
$all_query_ok=true; // our control variable
$mysqli->autocommit(false);
//we make 4 inserts, the last one generates an error
//if at least one query returns an error we change our control variable
$mysqli->query("INSERT INTO myCity (id) VALUES (100)") ? null : $all_query_ok=false;
$mysqli->query("INSERT INTO myCity (id) VALUES (200)") ? …Run Code Online (Sandbox Code Playgroud)