Transaction isolation controls whether your current session sees updates as other sessions are changing data concurrently.
For example, if you start a transaction, you may want to see a stable view of the database until you finish your transaction. This could be important if you are running several reporting-type queries over several minutes, and you want the numbers to match even if the underlying data is changing.
If you set isolation level to REPEATABLE READ
(the default), this means that your transaction reads data as it existed in the instant you started your transaction. Only if you finish that transaction and start another are you able to see updated data when you SELECT.
This means that MySQL has to keep multiple copies of the same row, and keep track of which transaction can see which versions.
If you leave a transaction running all day, it means that the old versions of updated rows cannot be purged from the database, because your long-running transaction might need to view them
If you set isolation level to READ COMMITTED
, then as other people make changes to data, your "view" of the data includes those changes the next time you do a SELECT. This is nice because old versions of rows can be purged immediately.
READ UNCOMMITTED
is supported for sake of the standard, but there's nearly no reason to use it. It means you can see changes in other sessions before they have committed. By analogy, it's like you could read my post as I'm typing it, before I click "Post your answer." It's not a very useful trick, because you could SELECT and see some updates and then they disappear because that user decided to roll back.
SERIALIZABLE
is also supported for the sake of the standard, it is not used frequently. This mode means that if you SELECT, then your transaction implicitly locks the rows you selected in share mode, i.e. multiple people can SELECT the same rows simultaneously without conflicting, but if any one session has that type of lock, then no one can UPDATE or DELETE those rows.
You should read http://dev.mysql.com/doc/refman/5.6/en/set-transaction.html for more details.