MySQL事务 - 项目以相反的顺序插入

时间:2012-01-19 07:36:59

标签: mysql transactions insert

我做了一笔交易:

$dbh->beginTransaction();

$i = 0;
while ($i < $total_items_num) {
  $insert_data->execute(
    array( $item_data[ $i ],
           $category,
           $price,
    )
  );

  $i++;
}

$dbh->commit();

在我的本地计算机上,项目按正确顺序插入,例如从1日到7日。但是在生产服务器上,它以相反的顺序插入,例如从7日到1日。

可能的原因是什么,我需要改变一些设置?

编辑:这是查询:

    $insert_data = $dbh->prepare ("
    INSERT INTO goods (
    item_id,
    item_data,
    category,
    price
    )
    VALUES (NULL, ?, ?, ?);
    ");

并且项目的顺序应该是从0到任何数字。例如。 0-6,0-15 ......

所以我想要的(以及对我来说当地有用的东西)是item_id(它是主键)以这种顺序应用于项目,例如如果第一项有item_id 1025,那么第二项应该有1026。

但是发生的事情是他们以相反的顺序插入。

感谢您的建议,如果问题含糊不清,抱歉,希望现在好一点。

2 个答案:

答案 0 :(得分:1)

我建议您查看几件事:

  1. 您的开发和生产环境是否与相关的表格具有相同的索引?

  2. 如果没有,请检查两种情况下的验证查询是否完全相同。

  3. 如果在这两种情况下你的答案都是肯定的,那么规则就是其他评论指出的规则:除非你在查询中使用ORDER BY,否则RDBMS在结果集中的表记录不一定是“有序的”。你设置了一些索引。

答案 1 :(得分:0)

SQL数据库没有行固有顺序的概念。仅当您在查询中明确指定ORDER BY子句时才应用顺序。在没有ORDER BY的情况下,允许数据库引擎以它选择的任何顺序返回行。

关于序列编号,您尚未显示如何定义表格或填充$item_data的方式,因此此问题目前无法解决。