I am using Django 1.9.7 and MySQL.
I have a migration file with multiple operations.
field=models.CharField(blank=True, max_length=200, null=True),
field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='sys_models.Country', verbose_name='Country'),
Django will run migrations inside a transaction for SQLite and PostgreSQL, as these databases that support DDL transactions. However, MySQL does not support DDL transactions.
I assume that the operations run in order, so I'm surprised that you are seeing different behaviour, but I'm not familiar enough with the code to give a definitive answer about that.