【问题标题】:Using transactions inside double for loop在双 for 循环中使用事务
【发布时间】:2013-04-23 23:28:56
【问题描述】:

如何为查询创建事务?对于每个新帐户,我都会在数据库中创建 210 条新记录。我需要事务,因为 210 个查询需要时间,我使用 mysql_insert_id() 来获取最后插入的 id。这里是代码:

$sql = "INSERT INTO bla bla....";

$result =  mysql_query($sql);
$lastid = mysql_insert_id();

if($result)
{
    for($i=0; $i<=6; $i++)
    {
        for($j=1; $j<=30; $j++)
        {
            $query_day = date('Y-m-d', strtotime('+'.$i.' days 1 hours'));
            $sql_insert = "INSERT INTO `e-heal`.`scr` (`sc_id`, `d_id`, `hour_id`, `date`, `a`) VALUES (NULL, '$lastid', '$j', '$query_day', '0');";
            mysql_query($sql_insert);
         }
    }     
}

【问题讨论】:

  • “我需要交易,因为” --- 它没有解释为什么你需要交易。没有它们你也可以做你想做的事
  • 如果2个或更多用户同时点击注册按钮???一个用户需要 3-4 秒将记录添加到数据库中..
  • "如果两个或更多用户同时点击注册按钮" -- 是这样吗? “一个用户需要 3-4 秒将记录添加到数据库中”——所以呢?事务不会提高性能
  • @MoonFox:mysql_insert_id() 与事务无关,并且总是返回正确的最新自动执行值(即使有 1 亿用户同时按下按钮)
  • @MoonFox:真的。这就是为什么提出原始问题总是一个好主意,因为您的解决方案可能基于错误的假设

标签: php mysql for-loop transactions


【解决方案1】:

这里不需要事务 - mysql_insert_id() 保证从当前会话返回最新的自动增量值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 2010-12-06
    • 2019-02-12
    • 1970-01-01
    • 2020-05-05
    相关资源
    最近更新 更多