Lots of database management systems provide "real transactions." The most obvious and available is probably Microsoft Access. Nearly all SQL-based servers can be expected to provide them.
The implementation of transactions can vary, however. While the familiar "Microsoft SQL Server" (nee Sybase) uses logfiles and locks, other systems do it differently. Both Postgres and Interbase use "versioning" which actually allows one long query to run, seeing its version of the data consistently, while subsequent updates occur apace, each one creating a "new version" of the data that eventually replaces the old.
Many people use transactions improperly. In my humble, "a transaction is not meant to exist for a long period of time; only milliseconds." Data in an SQL-based server is really not meant to remain "locked" for a long time. The performance of an SQL-based system can be very, very good if you play into its strengths and very, very bad if you don't.