Migrations are essentially imports of data into the system. Migrations can either add data (e.g. fill in a blank field on a given number of records), overwrite data (e.g. I already have data in a given field for several records, but I want to replace the data in that field with new data for all of those records), or delete data (e.g. I have data in a given field for several records, and I want to blank out the data in that field for all records).
Migrations are quite complicated and require several pieces of set up, therefore it is generally recommended to use other techniques prior to resorting to a migration. For example, if a Bulk Update can be used to add/overwrite/delete the data instead, it is generally preferable (and easier) to use a Bulk Update rather than a migration. Alternatively, if the number of records is fairly small (a bit arbitrary, but for argument's sake let's say 'small' means less than 25 - 30 records), it may be better to just manually make the updates on the records.
As stated above, it in generally recommended to find alternatives to using a migration due to the complications in using one (and therefore the higher probability of making an error while running one). However, there are some cases in which a migration is the preferred option. Migrations are the recommended tool if the use case meets these three criteria:
Fluxx has a great article that discusses in great detail how to set up a how to use a migration. Please see this article – its contents will NOT be repeated here: https://fluxxdev.atlassian.net/servicedesk/customer/portal/1/article/1796048177?src=-2020772513