$dbh->{RaiseError} = 1; $dbh->begin_work; eval { $dbh->do(qq~INSERT INTO table1 VALUES(?, ?)~, undef, undef, "somevalue"); my $last_id = $dbh->last_insert_id(undef, undef, qw(table1 id)); $dbh->do(qq~INSERT INTO table3 VALUES(?, ?)~, undef, undef, $last_id); }; if ($@) { eval { $dbh->rollback(); }; } $dbh->commit();