Une transaction est un ensemble d’opérations effectuées sur une base de données, qui a un caractère atomique. Lors d’une transaction, la base de données n’a pas d’état intermédiaire, tout au moins vu de l’extérieur de la transaction. Comme elle n’a pas d’état intermédiaire, elle ne peut pas être interrompue.
La notion de transaction permet de définir une forme de simultanéité. Prenons l’exemple d’un bateau qui décharge sa cargaison dans un port. Nous avons deux opérations à effectuer pour mettre à jour notre base. La première consiste à retirer la cargaison de la soute du bateau, et la seconde à ajouter cette cargaison à l’entrepôt.
Ces deux opérations doivent être menées simultanément. Si elles ne le sont pas, il existe un instant où la cargaison se trouve à la fois sur le bateau et dans l’entrepôt, ou un instant où la cargaison ne se trouve ni dans la soute du bateau ni sur le quai du port, suivant l’ordre dans lequel les opérations sont réalisées.
Du point de vue de l'opérateur qui crée une transaction, il n'y a bien sûr pas de simultanéité : les opérations se déroulent les unes après les autres. Dans le cadre d'une transaction, un opérateur peut passer par des états dans lesquels les contraintes d'intégrité référentielles ne sont pas respectées, ce qui est parfois indispensable. Il peut également décider de revenir en arrière, et d'annuler les modifications qu'il a apportées à sa base depuis le début de sa transaction.
Les transactions prennent tout leur sens pour des bases de données utilisées par plusieurs utilisateurs en même temps, ce qui est généralement le cas.