Двойной первичный ключ $cordovaSQLite

как я могу создать таблицу с двумя первичными ключами с помощью $cordovaSQLite?

Мой код:

$cordovaSQLite.execute(db, 'CREATE TABLE IF NOT EXISTS mytable(id INTEGER PRIMARY KEY AUTOINCREMENT, num INTEGER PRIMARY KEY, text TEXT)');

Это возможно?


person Luca Vall    schedule 20.01.2017    source источник
comment
Я бы посоветовал взглянуть на этот вопрос. Также рекомендуется не использовать AUTOINCREMENT, так как он накладывает большие накладные расходы.   -  person Ankh    schedule 23.01.2017


Ответы (1)


Установка двух первичных ключей невозможна, но вы можете установить уникальное ограничение для любых полей, которые вы хотите использовать в качестве первичного ключа. Вы можете эмулировать автоинкремент в этом поле, посмотрев на этот вопрос: -поле первичного ключа. Надеюсь это поможет.

person Ikenna Anthony Okafor    schedule 26.01.2017
comment
Да, я изменил свой код следующим образом: CREATE TABLE IF NOT EXISTS mytable (id INTEGER PRIMARY KEY AUTOINCREMENT, num INTEGER, UNIQUE (id, num)). Но каков правильный запрос для вставки записи, если id и num отсутствуют в таблице? - person Luca Vall; 27.01.2017
comment
Если столбец id автоматически увеличивается, его значение будет сгенерировано механизмом SQLite. Предполагая, что он не увеличивается автоматически (как столбец num), правильное значение для обоих столбцов: INSERT INTO mytable (id, num, text) VALUES ((SELECT IFNULL(MAX(id), 0)) + 1 FROM mytable), (SELECT IFNULL(MAX(num), 0)) + 1 FROM mytable), 'text here'). Дополнительные сведения см. здесь. - person Ikenna Anthony Okafor; 28.01.2017
comment
Только для столбца num (в данном случае столбец id автоматически увеличивается) запрос будет таким: INSERT INTO mytable (num, text) VALUES ((SELECT IFNULL(MAX(num), 0)) + 1 FROM mytable), 'text here'). - person Ikenna Anthony Okafor; 28.01.2017