As MySQL allows you to work with both transactional and non-transactional tables (which don't allow rollback), constraint handling is a bit different in MySQL than in other databases.
We have to handle the case when you have updated a lot of rows with a non-transactional table which can't rollback on errors.
The basic philosophy is to try to give an error for anything that we can detect on compile time but try to recover from any errors we get run time. We do this in most cases, but not yet for all. See section 1.9.4 New Features Planned For The Near Future.
The basic options MySQL has is to stop the statement in the middle or do it's best to recover from the problem and continue.
Here follows what happens with the different types of constraints.
NOT NULL
and DEFAULT
valuesENUM
and SET