$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 table2 VALUES(?, ?)~, undef, undef, $somevalue); my $last_id2 = $dbh->last_insert_id(undef, undef, qw(table2 id)); $dbh->do(qq~INSERT INTO table3 VALUES(?, ?, ?)~, undef, undef, $last_id, $last_id2); }; if ($@) { eval { $dbh->rollback(); }; } $dbh->commit();