真的没办法和MyIsam一起使用交易吗?删除+插入可能吗?

时间:2016-08-27 09:41:45

标签: mysql myisam

这是一个小代码:

function setList ($to, array $array)
{    
    DELETE FROM list WHERE A = $to;
    foreach ($array as $id)
    {
        INSERT INTO LIST ($to, $id);
    }
}

setList (2, []);
setList (2, [1,2,3,4]);
setList (2, [2,3]);
setList (2, [3,4,5,6]);

这是更新列表,但为避免重复输入 - 首先删除所有。它的MyIsam,所以基本上没办法使用交易。有没有办法同时删除+插入?

1 个答案:

答案 0 :(得分:1)

正如this(和许多其他)SO问题所讨论的那样,MyISAM引擎不支持事务。如果你想要事务支持,你应该考虑使用InnoDB。

但是,即使使用MyISAM,您也可以通过识别INSERT语句可以在一个语句中一起完成而不是单独完成来使您的当前代码更具原子性。

$sql = array(); 
foreach ($data as $row) {
    $sql[] = '("'.mysql_real_escape_string($row['to']).'", '.$row['id'].')';
}
mysql_query('INSERT INTO table (to, id) VALUES '.implode(',', $sql));

这也有很好的副作用,插件也可以更有效地完成。