加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在使用Perl DBI迭代结果集时更新MySQL表是否安全?

发布时间:2020-12-15 23:36:06 所属栏目:大数据 来源:网络整理
导读:具体来说,我需要从表中删除一些行,同时迭代表中的所有行. DBI在 Java中有类似可更新结果集的东西吗?所以,如果我这样做: $query_all = $dbh-prepare("select Id,X,Y,Z from MyTable");$delete = $dbh-prepare("delete from MyTable where Id = ?");$query_a
具体来说,我需要从表中删除一些行,同时迭代表中的所有行. DBI在 Java中有类似可更新结果集的东西吗?所以,如果我这样做:

$query_all = $dbh->prepare("select Id,X,Y,Z from MyTable");
$delete = $dbh->prepare("delete from MyTable where Id = ?");
$query_all->execute();

while ( my @res = $query_all->fetchrow_array() ){
    my ($id,$x,$y,$z) = @res;
    # fetch the IDs of any other rows that have the same X,Z values
    foreach ( the_duplicate_ids ){
        $delete->execute($dup_id); # safe ??
        # also delete from another table using $dup_id
    }
}

…这可以吗?

只是为了给出一些上下文,我将删除具有相同X,Z列值的重复行,并且在每种情况下只留下一行(找到第一行).如果这就是我所做的,我只是在这3列上设置一个唯一索引来消除重复,但我还需要从另一个表中删除从MyTable中删除的每个重复的行.

最后,我编写了一个脚本来识别和收集我需要删除到数组中的行的所有ID,然后迭代该数组,删除两个表中的相关行.我仍然有兴趣找到原始问题的答案.如果我有时间,我会尝试自己回答,但如果有人已经知道我想听听它.

解决方法

您担心并发修改错误?

如果您正在使用事务,只要您在完成迭代后保存提交就不会有问题.

但是,如果您使用自动提交,则可能是一个问题,因此解决方案将是:

伪代码ish – 未经测试

#Loop through each row and note the records to delete
my @deathrow = ();
foreach my $row ( @resultset ) {
    push $row->{id},@deathrow;
}

#Now that we're done iterating,do all the deletes in one statement
$dbh->execute("DELETE WHERE id IN ( " . @deathrow . " )"); #something like that

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读