首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >真的没有办法在MyIsam中使用transaction吗?也许是Delete+insert?

问真的没有办法在MyIsam中使用transaction吗?也许是Delete+insert?
EN

Stack Overflow用户
提问于 2016-08-27 17:41:45
回答 1查看 98关注 0票数 1

下面是一小段代码:

代码语言:javascript
复制
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,所以基本上没有办法使用事务。有没有一种同时delete+insert的方法?

EN

回答 1

Stack Overflow用户

发布于 2016-08-27 17:57:27

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

但是,通过认识到所有INSERT语句都可以在一条语句中一起完成,而不是分开完成,即使使用MyISAM,也可以使当前代码更具原子性。

代码语言:javascript
复制
$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));

这也有一个很好的副作用,那就是插入的效率也会更高。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39179662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档