在使用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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |