Как может быть уникальной каждая строка в таблице sqlite.Не просто столбец строки - PullRequest
2 голосов
/ 06 мая 2019

У меня есть таблица sqlite с двумя столбцами, такими как имя и фамилия. Я хочу, чтобы имя и фамилия отличались, а не только от имени.

Код моей таблицы

private static final String MAKE_TABLE_NAME_SURNAME = "CREATE TABLE " +
 TABLE_DISEASE_SEMPTOM + "(" + KEY_DSID  " INTEGER PRIMARY KEY AUTOINCREMENT," +
 NAME + " TEXT, " + SURNAME + " TEXT) ";

Я не могу использовать

private static final String MAKE_TABLE_NAME_SURNAME = "CREATE TABLE " +
 TABLE_DISEASE_SEMPTOM + "(" + KEY_DSID  " INTEGER PRIMARY KEY AUTOINCREMENT," +
 NAME + " TEXT UNIQUE, " + SURNAME + " TEXT UNIQUE) ";

Потому что, если я использую этот код, я не могу добавить одно и то же имя, но другую фамилию или ту же фамилию, но другое имя. Как можно игнорировать, если только они оба одинаковы.

Ответы [ 2 ]

1 голос
/ 06 мая 2019

Я считаю, что вы хотите следующее: -

private static final String MAKE_TABLE_NAME_SURNAME = "CREATE TABLE " +
   TABLE_DISEASE_SEMPTOM + "(" + KEY_DSID  " INTEGER PRIMARY KEY AUTOINCREMENT," +
   NAME + " TEXT, " + SURNAME + " TEXT, UNIQUE(" + NAME + "," + SURNAME +")) ";

То есть вы определяете комбинацию столбца имени и столбцов фамилии как ограничение UNIQUE.

Например, рассмотрим: -

DROP TABLE IF EXISTS TABLE_DISEASE_SEMPTOM;
CREATE TABLE IF NOT EXISTS TABLE_DISEASE_SEMPTOM (KEY_DSID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, SURNAME TEXT, UNIQUE(NAME,SURNAME));
INSERT INTO TABLE_DISEASE_SEMPTOM (NAME,SURNAME) VALUES('Fred','Bloggs'),('Fred','Smith'),('Mary','Smith'),('Jane','Doe');
INSERT OR IGNORE INTO TABLE_DISEASE_SEMPTOM (NAME,SURNAME) VALUES('Fred','Bloggs'); -- will not be inserted as duplicate
SELECT * FROM TABLE_DISEASE_SEMPTOM;

Первые 4 вставки работают, последняя (сама по себе) игнорируется (так как это дубликат). Таким образом, последний запрос выдает: -

enter image description here

Журнал: -

INSERT INTO TABLE_DISEASE_SEMPTOM (NAME,SURNAME) VALUES('Fred','Bloggs'),('Fred','Smith'),('Mary','Smith'),('Jane','Doe')
> Affected rows: 4
> Time: 0.117s


INSERT OR IGNORE INTO TABLE_DISEASE_SEMPTOM (NAME,SURNAME) VALUES('Fred','Bloggs')
> Affected rows: 0
> Time: 0.117s

т.е. последняя вставленная вставка без строк

1 голос
/ 06 мая 2019

Эта проверка выполняется на стороне сервера / приложения.(проверьте переменные, прежде чем пытаться вставить их в базу данных)

...