While databases can efficiently hold large amounts of information that can be queried, all that data and all that querying power is useless if the data is incorrect or nonsensical. Databases provide a plethora of techniques for ensuring the integrity and consistency: primary key and unique constraints can be employed to ensure entity integrity; foreign key constraints aid in ensuring relational integrity, and transactions help ensure that the database's data remains consistent.
While INSERT, UPDATE, and DELETE statements are the most granular operations for modifying a database's underlying data, at times we want to treat multiple INSERT, UPDATE, and/or DELETE statements as one atomic operation. That is, in certain situations, rather than having each INSERT, UPDATE, and DELETE statement stand on its own, we want the set of statements to be, together, an indivisible unit. When issuing this set of statements we want either the entire set of statements to succeed, or all to fail - there should be no 'in-between' state.
The article continues at http://aspnet.4guysfromrolla.com/articles/072705-1.aspx