2017-01-20 22 views
0

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

Мой код:

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

Это possibile?

+0

Предлагаю посмотреть [на этот вопрос] (http://stackoverflow.com/questions/6154730/sqlite-multi-primary-key-on-a-table-one-of-them-is- автоматическое приращение). Также рекомендуется, чтобы «AUTOINCREMENT» не использовался, поскольку он [налагает много накладных расходов] (http://www.sqlite.org/autoinc.html). – Ankh

ответ

0

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

+0

Да, я изменил свой код следующим образом: CREATE TABLE, ЕСЛИ НЕ СУЩЕСТВУЕТ mytable (id INTEGER PRIMARY KEY AUTOINCREMENT, num INTEGER, UNIQUE (id, num)). Но каков правильный запрос на вставку записи, если идентификатор и номер отсутствуют в таблице? –

+0

Если столбец идентификатора автоматически увеличивается, его значение будет генерироваться движком 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') '. Для получения дополнительной информации см. [Здесь] (http://stackoverflow.com/questions/6982173/sqlite-auto-increment-non-primary-key-field). –

+0

Для столбца 'num' (в этом случае столбец id автоинкремент), запрос:' INSERT INTO mytable (num, text) VALUES ((SELECT IFNULL (MAX (num), 0)) + 1 FROM mytable), 'текст здесь') '. –

 Смежные вопросы

  • Нет связанных вопросов^_^