SET @a:=10;
UPDATE
table
SET
table.ID=@a:=@a+1
WHERE
table.ID=5
In sqlite I employ limit #!/usr/bin/perl --
use strict;
use warnings;
use DBI;
use DBD::SQLite;
use Data::Dump qw/ dd /;
unlink 'goner.sqlite';
my $dbh = DBI->connect(
"DBI:SQLite:database=goner.sqlite",
undef, undef,
{qw/RaiseError 1/}
);
eval {
$dbh->do('CREATE TABLE NameId ( ID INTEGER , Name TEXT );');
$dbh->do(q!INSERT INTO NameID ( ID, Name ) VALUES ('1','bar');!);
$dbh->do(q!INSERT INTO NameID ( ID, Name ) VALUES ('2','bar');!);
$dbh->do(q!INSERT INTO NameID ( ID, Name ) VALUES ('5','FEE');!);
$dbh->do(q!INSERT INTO NameID ( ID, Name ) VALUES ('5','FII');!);
$dbh->do(q!INSERT INTO NameID ( ID, Name ) VALUES ('5','FOO');!);
} or warn "$@";
dd( $dbh->selectall_arrayref('select * from NameID' ) );
dd( $dbh->selectrow_array(q{ select COUNT(*) from NameID WHERE ID='5'
+ } ) );
#~ http://www.sqlite.org/compile.html#enable_update_delete_limit
#~ https://www.sqlite.org/lang_update.html
#~ https://dev.mysql.com/doc/refman/5.0/en/update.html
my $sql = qq{
UPDATE
NameID
SET
ID=?
WHERE
ID='5'
LIMIT
1
};
my( $count ) = $dbh->selectrow_array(q{ select COUNT(*) from NameID W
+HERE ID='5' } );
my $nid = 10;
while( $count ){
dd({ rowsaffected => $dbh->do( $sql, {}, $nid ) });
dd( $dbh->selectall_arrayref('select * from NameID' ) );
$nid++;
$count--;
}
undef $dbh;
unlink 'goner.sqlite';
__END__
[[1, "bar"], [2, "bar"], [5, "FEE"], [5, "FII"], [5, "FOO"]]
3
{ rowsaffected => 1 }
[[1, "bar"], [2, "bar"], [10, "FEE"], [5, "FII"], [5, "FOO"]]
{ rowsaffected => 1 }
[[1, "bar"], [2, "bar"], [10, "FEE"], [11, "FII"], [5, "FOO"]]
{ rowsaffected => 1 }
[[1, "bar"], [2, "bar"], [10, "FEE"], [11, "FII"], [12, "FOO"]]
|