2017-01-20 1 views
0

Comment puis-je créer une table avec 2 clés primaires avec $ cordovaSQLite?

Mon code:

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

Il est possibile?

+0

Je suggère de jeter un oeil [à cette question] (http://stackoverflow.com/questions/6154730/sqlite-multi-primary-key-on-a-table-one-of-them-is- incrémentation automatique). Il est également conseillé que 'AUTOINCREMENT' ne soit pas utilisé car il [impose beaucoup de frais généraux] (http://www.sqlite.org/autoinc.html). – Ankh

Répondre

0

La définition de deux clés primaires n'est pas possible, mais vous pouvez définir une contrainte unique sur tous les champs que vous souhaitez agir comme une clé primaire. Vous pouvez émuler l'auto-incrémentation sur ce champ en regardant cette question: SQLite auto-increment non-primary key field. J'espère que cela t'aides.

+0

Oui, j'ai modifié mon code avec ceci: CREATE TABLE IF NOT EXISTS mytable (id INTEGER PRIMARY KEY AUTOINCREMENT, num INTEGER, UNIQUE (id, num)). Mais, quelle est la bonne requête pour insérer un enregistrement si l'identifiant et le num ne sont pas dans la table? –

+0

Si la colonne id est incrémentée automatiquement, sa valeur sera générée par le moteur SQLite. En supposant que ce n'est pas auto-incrémenté (comme la colonne num), la correcte pour les deux colonnes est: 'INSERT INTO mytable (id, num, text) VALEURS ((SELECT IFNULL (MAX (id), 0)) + 1 FROM mytable), (SELECT IFNULL (MAX (num), 0)) + 1 FROM mytable), 'texte ici') '. Reportez-vous [ici] (http://stackoverflow.com/questions/6982173/sqlite-auto-increment-non-primary-key-field) pour plus d'informations. –

+0

Pour seulement la colonne 'num' (dans ce cas, la colonne id est auto-incrémentée), la requête est:' INSERT INTO mytable (num, text) VALEURS ((SELECT IFNULL (MAX (num), 0)) + 1 FROM mytable), 'texte ici') '. –