|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 9 ![]() |
Bonjour
Est t'il possible de creer avec SQLite, une table avec deux clés primaire dont une en AUTOINCREMENT. J'ai essaye directement par un script mais aussi avec des outils comme sqliteadmin, ca ne veut pas passer. Pour prevenir les questions du genre : pourquoi tu veux faire çà? Je veux pouvoir representer un lien identifiant. Merci pour vos réponses |
|
|
00
|
|
|
#2 |
|
Membre confirmé
![]() Inscription : avril 2006 Messages : 342 ![]() |
Salut !
Tu ne peux avoir qu'une seule clé primaire par table. Par contre il est possible de créer une clé primaire à partir de deux champs d'une table. ++
__________________
Le problème est souvent entre la chaise et le clavier
|
|
|
00
|
|
|
#3 | |
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 9 ![]() |
Citation:
Mais je ne comprends pas ta reponse. Si je peux creer une cle primaire a partir de deux champs de la même table, c'est que d'une certaine facon j'ai deux cles primaire (on ne joue que sur les mots Si tu as un exemple de requete SQL, je suis preneur Merci |
|
|
|
00
|
|
|
#4 | ||
|
Membre confirmé
![]() Inscription : avril 2006 Messages : 342 ![]() |
Non non je ne joue pas sur les mots...
Si tu constitues une clé primaire à partir de deux champs, c'est le couple des deux clés qui devra être unique, pas chaque clé individuellement. Voici un exmple de table : Code :
++
__________________
Le problème est souvent entre la chaise et le clavier
|
||
|
|
00
|
|
|
#5 |
|
Membre confirmé
![]() Inscription : avril 2006 Messages : 342 ![]() |
Sinon tu peux aussi mettre un de tes deux champs en clé primaire, et l'autre en "UNIQUE".
++
__________________
Le problème est souvent entre la chaise et le clavier
|
|
|
00
|
|
|
#6 | |||
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 9 ![]() |
Citation:
je suis d'accord avec toi. mais je veux en plus, qu'une de ces cles soit en AUTOINCREMENT. et là je me retrouve avec un refus. |
|||
|
|
00
|
|
|
#7 |
|
Membre confirmé
![]() Inscription : avril 2006 Messages : 342 ![]() |
Quand tu mets une clé en autoincrement, elle est également considérée comme clé primaire. Et comme tu as sans doute défini une autre clé primaire, SQLite refuse...
Tu ne peux avoir qu'une seule et unique clé primaire dans une table, sinon ce n'est plus une clé primaire ++
__________________
Le problème est souvent entre la chaise et le clavier
|
|
|
00
|
|
|
#8 | |
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 9 ![]() |
Citation:
Mais il est possible de définir un couple de champs (meme plus si on veut) comme cle primaire avec un en autoincrement. C'est une chose courante, qui fonctionne avec d'autre SGBD (mysql par exemple) mais qui ne semble pas fonctionner avec SQLite |
|
|
|
00
|
|
|
#9 | ||
|
Membre du Club
![]() Développeur Web Inscription : décembre 2005 Messages : 110 ![]() |
C'est très probable que ça ne fonctionne pas avec SQLite. Je n'ai jamais essayé. Je dis ça parce que le type AUTO INCREMENT n'existe pas réellement sous SQLite. Il est implicite. C'est-à-dire que pour mettre un champ en autoincrement, il faut lui affecter le type INTEGER conjointement avec le mot clé PRIMARY KEY. Le mot clé AUTO INCREMENT n'existe pas.
Pour déclarer une clé primaire "double", il faut faire PRIMARY KEY(champ1, champ2), comme indiqué plus haut, tu comprendras donc qu'il ne peut pas y avoir de champ auto increment dans une clé double avec SQLite , car cela reviendrait à déclarer 2 fois une clé primaire, comme ceci : Code :
Par contre je crois qu'il ne faut pas mettre de contrainte 'NOT NULL' car pour que l'auto-increment fonctionne, il faut mettre 'null' dans la requête d'insertion de données. --> Le site officiel pour plus de détails |
||
|
|
00
|
|
|
#10 | ||||
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 9 ![]() |
Citation:
Citation:
|
||||
|
|
00
|
|
|
#11 |
|
Membre du Club
![]() Développeur Web Inscription : décembre 2005 Messages : 110 ![]() |
Bon courage
|
|
|
00
|
|
|
#12 |
|
Membre du Club
![]() Inscription : novembre 2006 Messages : 55 ![]() |
Pourquoi renoncé a Sqllite ta qu'a gérer l'auto incrémentation tout seul.
OK c'est pas très propre mais bon,c'est toujours ca O fait tu l utilise avec quel langage ?? |
|
|
00
|
|
|
#13 | |
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 9 ![]() |
Citation:
Je l'utilise pour l'instant avec MySQL |
|
|
|
00
|
|
|
#14 |
|
Membre du Club
![]() Inscription : novembre 2006 Messages : 55 ![]() |
non pas forcément
si tu le fai correctement yaura pas de probleme de concurrence |
|
|
00
|
|
|
#15 | |
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 9 ![]() |
Citation:
|
|
|
|
00
|
|
|
#16 |
|
Membre du Club
![]() Inscription : novembre 2006 Messages : 55 ![]() |
tu fais une requete Sql qui recupere ton id le plus grand (select Max('ton_id') from nomtable)tu l' affecte à une variable
Puis lorque tu insert ton nouvel enregistrement tu affecte + 1 a cette variable et logiquement tu n'aura aucun doublon |
|
|
00
|
|
|
#17 | |
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 9 ![]() |
Citation:
Apres avoir regardé la doc, il faudrait utiliser un BEGIN EXCLUSIVE. Mais je me demande si ce n'est pas exagéré? (Je n'ai pas d'avis là dessus). |
|
|
|
00
|
|
|
#18 |
|
Membre du Club
![]() Inscription : novembre 2006 Messages : 55 ![]() |
Que sous entend tu par deux processus ?
Si tu veux gerer le faite que deux personnes puisse inserer au même moment un tuple, pourquoi serait il exagérer de mettre en place une transaction exclusive ? A mon avis c'est une bonne solution a ton probleme, car ca te permeterai de ne pas abandonner sqlite |
|
|
00
|
|
|
#19 | |
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 9 ![]() |
Citation:
En tout cas merci à toi car je n'aurais pas cherché plus loin même si je n'aime toujours pas cette methode du SELECT MAX....INSERT qui mal utilisé est tres mauvais et tres laid en fait |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com