# What are migrations?

For the uninitiated, migrations (also known as 'schema evolution' or 'mutations') are a way of changing your database schema from one version into another. Django by itself can only do this by adding new models, but nearly all projects will find themselves changing other aspects of models - be it adding a new field to a model, or changing a database column to have null=True.

South, and other solutions, provide a way of getting round this by giving you the tools to easily and predictably upgrade your database schema. You write migrations, which tell South how to upgrade from one version to the next, and by stringing these migrations together you can move forwards (or backwards) through the history of your database schema.

In South, the migrations also form the way of creating your database initially - the first migration simply migrates from an empty schema to your first tables. This way, running through all the migrations brings your database up-to-date with the most current version of the app, and if you already have an older version, you simply need to run through the ones that appeared since last time.

Running through the :ref:tutorial <tutorial-part-1> will give you a good idea of how migrations work and how they're useful to you, with some solid examples.

Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.