Salut
j'ai cette erreur, et je n'arrive ni à comprendre pourquoi elle arrive subitement (à priori) ni à résoudre.
Du coup je ne peux pas faire de nouvelle entrée...
Qui saurait m'aider..? Merci
Pièce jointe 369569
Version imprimable
Salut
j'ai cette erreur, et je n'arrive ni à comprendre pourquoi elle arrive subitement (à priori) ni à résoudre.
Du coup je ne peux pas faire de nouvelle entrée...
Qui saurait m'aider..? Merci
Pièce jointe 369569
Bonjour,
C'est tout simple: tu as un index unique sur Id, et tu tentes d'insérer une ligne dans cette table avec 0 pour cette colonne, alors qu'il y en a déjà une.
Pour la résoudre, il faut affecter une autre valeur à cette colonne.
Tatayo.
Avec un peu de chance, l'id est de type autoincrémént, auquel cas il suffit de ne pas citer la colonne dans l'ordre insert pour que le SGBD affecte une nouvelle valeur :)
Merci Tatayo...sauf que lorsque je mets une valeur en insert manuel autre que 0, le probleme reste le même. Je sais que j'ai réinjecté la table il y a pas suite au soucis OVH (idiot de ma part) et je pense ne pas avoir réaffecté les bonnes clés à chaque colonnes ..il doit en manquer..puisque la bdd fonctionnait pas mal il y a peu...
Il ne s'agit pas de mettre UNE valeur différente de 0, mais une valeur différente pour CHAQUE ligne. Chaque ligne de cette table doit avoir une valeur différente pour cette colonne.
Pour la réponse de escartefigue, il suffit de ne pas spécifier la colonne lors de la requête INSERT.
Par contre je doute qu'elle soit de type auto-incrément, vue la capture d'écran. Mais je ne connais pas PHPMYADMIN plus que ça (j'évite autant que faire se peut MySQL ;) )
Tatayo.
Merci Tatayo...
Oui j'entends bien que la valeur doit être différente ... la base sert à entrer des fiches nouvelles et différentes, donc bien reconnues avec leur propre ID...
Avec l'auto-increment , j'ai cette réponse : #1062 - ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '25170' for key 'PRIMARY'
Ceci dit, l'insertion manuelle d'une valeur sur la clé fonctionne : le résultat est montré comme en défaut sur phpmyadmin , mais est enregistré dans la base avec toutes les valeurs placées...
sur le dump que je fais, j'ai un affichage différent à ce jour en rapport d'une sauvegarde précédente :
et aujourd'hui :Code:CREATE TABLE IF NOT EXISTS `resto` (...) ENGINE=MyISAM AUTO_INCREMENT=25170 DEFAULT CHARSET=latin1;
Vu qu'avec l'auto-increment , j'ai cette réponse :Code:CREATE TABLE `resto` (...) ENGINE=MyISAM DEFAULT CHARSET=latin1;
..y aurait il un début de réponse ici..? Merci ;-)Citation:
#1062 - ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '25170' for key 'PRIMARY'
...si je fais un ALTER TABLE AUTO_INCREMENT= valeurquejeveux ... ça pointe les nouveaux ID à partir de cette valeur sans abimer les autres déjà en place..?
Pouvez vous publier
- le DDL complet : CREATE TABLE + ALTER TABLE éventuel
- l'ordre INSERT complet
Pièce jointe 369780Pièce jointe 369784
Merci escartefigue
J'ai trouvé (pas tout seul, http://www.nazmulhuda.info/set-auto_...ng-table-mysql )
L'une de mes ligne, la 1ere, est en ID 0 ... ce que ne peut pas gérer SQL en AUTO_INC , il faut obligatoirement une ligne en valeur différente, au moins à 1
Donc, si l'on a ce genre de soucis avec une erreur #1062 - ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry 'xxx' for key 'PRIMARY' , il faut vérifier que la table ne comporte pas de ligne à 0 (zéro) et nettoyer au besoin avec :
ALTER TABLE xxx AUTO_INCREMENT = le chiffre nécessaire;
Associer la ligne en AUTO_INC : ALTER TABLE xxx MODIFY ID int AUTO_INCREMENT;
Et ça doit bien faire avancer, voire régler le soucis. Pour moi c'est résolu...mais j'ai un autre soucis sur cette table, sur un autre post ^^
Merci @escartefigue et @Tatayo
En effet, extrait de la doc V5.7 disponible ICI
auto_increment_increment and auto_increment_offset are intended for use with master-to-master replication, and can be used to control the operation of AUTO_INCREMENT columns. Both variables have global and session values, and each can assume an integer value between 1 and 65,535 inclusive
Salut à tous.
En consultant le lien que vous nous avez donné sur le descriptif de votre table "resto", je constate que la clef primaire :Citation:
Envoyé par Chanteur06
n'est pas auto incrémenté.Code:`id` int(10) unsigned NOT NULL,
Que votre colonne "id" contienne un 0 ou pas n'a aucune influence, vu qu'elle n'est pas auto incrémenté !
Je vous communique un exemple pour transformer votre colonne "id" en colonne auto incrémenté.
@+Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189 -------------- SET AUTOCOMMIT = 0 -------------- -------------- START TRANSACTION -------------- -------------- DROP DATABASE IF EXISTS `base` -------------- -------------- CREATE DATABASE IF NOT EXISTS `base` DEFAULT CHARACTER SET `latin1` DEFAULT COLLATE `latin1_general_ci` -------------- -------------- drop table if exists `test` -------------- -------------- CREATE TABLE `test` ( `id` integer unsigned NOT NULL auto_increment primary key, `val` char(10) NULL default NULL ) ENGINE=InnoDB DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci` ROW_FORMAT=COMPRESSED -------------- -------------- insert into `test` (`id`,`val`) values (25, 'un'),(33, 'deux'),(75, 'trois'),(207, 'quatre'),(349, 'cinq'),(711, 'six'),(813, 'sept') -------------- -------------- select * from `test` -------------- +-----+--------+ | id | val | +-----+--------+ | 25 | un | | 33 | deux | | 75 | trois | | 207 | quatre | | 349 | cinq | | 711 | six | | 813 | sept | +-----+--------+ -------------- SELECT AUTO_INCREMENT as last_id FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = 'base' and table_name = 'test' -------------- +---------+ | last_id | +---------+ | 814 | +---------+ -------------- commit -------------- -------------- alter table `test` drop column `id` -------------- -------------- alter table `test` add column `id` integer unsigned auto_increment not null primary key first -------------- -------------- describe `test` -------------- +-------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | val | char(10) | YES | | NULL | | +-------+------------------+------+-----+---------+----------------+ -------------- select * from `test` -------------- +----+--------+ | id | val | +----+--------+ | 1 | un | | 2 | deux | | 3 | trois | | 4 | quatre | | 5 | cinq | | 6 | six | | 7 | sept | +----+--------+ -------------- SELECT AUTO_INCREMENT as last_id FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = 'base' and table_name = 'test' -------------- +---------+ | last_id | +---------+ | 8 | +---------+ -------------- set @rang := 10 -------------- -------------- set @var = concat('alter table `test` auto_increment = ', @rang) -------------- -------------- PREPARE stmt FROM @var -------------- -------------- EXECUTE stmt -------------- -------------- DEALLOCATE PREPARE stmt -------------- -------------- SELECT AUTO_INCREMENT as last_id FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = 'base' and table_name = 'test' -------------- +---------+ | last_id | +---------+ | 10 | +---------+ -------------- commit -------------- -------------- insert into `test` (`val`) values ('huit'),('neuf') -------------- -------------- select * from `test` -------------- +----+--------+ | id | val | +----+--------+ | 1 | un | | 2 | deux | | 3 | trois | | 4 | quatre | | 5 | cinq | | 6 | six | | 7 | sept | | 10 | huit | | 11 | neuf | +----+--------+ -------------- commit -------------- -------------- SELECT AUTO_INCREMENT as last_id FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = 'base' and table_name = 'test' -------------- +---------+ | last_id | +---------+ | 12 | +---------+ -------------- COMMIT -------------- -------------- SET AUTOCOMMIT = 1 -------------- Appuyez sur une touche pour continuer...
Merci Artemus24 , si tu regarde bien ma réponse, il y a un SQL qui indique l'AUTO-INC de cette façon :
Code:ALTER TABLE xxx MODIFY ID int AUTO_INCREMENT;
Salut Chanteur06.
Oui, je l'ai vu, mais modifier seulement l'auto incrément n'est pas suffisant. Pourquoi ?
Parce que votre colonne "id" n'est pas auto incrémenté !
Donc vous devez modifier la colonne "id" en la détruisant puis en la récréant avec l'option auto incrémenté, comme dans mon exemple.
@+