您好我正在使用php和mysql实现事务。下面是我插入测试的代码,其中id是一个自动增量值。
try{
$dbh->beginTransaction();
$stmt = $dbh->prepare("INSERT INTO test(id,name) VALUES (?,?)")
$stmt->execute(array(null ,$Name));
-----
----- and some more queries
$dbh-> commit();
$dbh=null;
}
catch(Exception $e)
{
$dbh->rollBack();
$dbh=null;
}
我面临的问题是每次事务是rollBack时由于某些异常导致我在下次运行查询插件时根据上次运行时分配的自动增量值进行工作
例如:
运行1: insert query - id值为1,事务为rolledBack
RUN2: 插入查询 - 现在它将id值设为2,尽管我之前的事务是scrollBack
有人可以帮我吗?
答案 0 :(得分:1)
之所以发生这种情况,是因为自动增量值在所有transactins之间共享,并且本质上它是DDL,而不是DML。因此无法回滚(以及任何其他DDL,如TRUNCATE
或ALTER
无法回滚)。
PS:自动增量PK是一个代理键,这意味着你不应该关心它保留的值。你应该对它是独一无二的事实感到满意。就这样。如果您需要维护一些“订单” - 创建另一列并手动执行此操作。