Вам необходимо обработать существующие записи для дублирования контента, чтобы применить уникальные ограничения во время миграции.
Чтобы понять проблему, давайте рассмотрим пример.
+----+------------+-----------+------------+
| id | first_name | last_name | mobile |
+----+------------+-----------+------------+
| 1 | John | Smith | 1234567890 |
| 2 | Adel | Jan | 0987654321 |
| 3 | Marray | Jane | 1234567890 |
+----+------------+-----------+------------+
Над таблицей указан номер мобильного телефона, который вы можете преобразовать в уникальный индекс.
Для этого сначала необходимо удалить повторяющиеся значения из этого столбца, а затем применить запрос на миграцию.
static final Migration MIGRATION_1_2 = new Migration(1, 2) {
@Override
public void migrate(SupportSQLiteDatabase database) {
database.execSQL("Query to remove duplicate value in column")
database.execSQL(“CREATE UNIQUE INDEX index_<MyTableName>_<ColumnName> ON <MyTableName> (<ColumnName>)”);
}
};
Как удалить дублирующее значение из столбца, зависит от вашей бизнес-логики.
Если вы не удалите дубликат, прежде чем сделать столбец уникальным индексом, тогда вы столкнетесь.
android.database.sqlite.SQLiteConstraintException: УНИКАЛЬНОЕ ограничение
не удалось