[RESOLU][mysql][auto_increment] comment reinitialiser un increment

comment reinitialiser un increment [RESOLU][mysql][auto_increment] - SQL/NoSQL - Programmation

Marsh Posté le 28-01-2014 à 18:36:47    

:hello: bonjour,
 
j'utilises une base mysql qui commence à beaucoup travailler,  
j'ai par contre des reférence en clefsprimaires qui ont été supprimé au fil du temps.
 
résultat j'ai des reférences ou id non-concécutifs, ça gềne pas trop, mais c'est crado...
 
je me disais qu'il suffisait de réindexer mais ça ne fonctionne pas, (du moins avec ce que je pensais être la bonne méthode au regard de la doc officielle sur le site mysql)
 
le cas typique :

francois@belzebot ~ % scp francois@baal:"/home/francois/Documents/*full.20140128.gz" .
francois@baal's password:  
mysql.dump.full.20140128.gz                                                                                                                                                100%  281KB 281.1KB/s   00:00    
francois@belzebot ~ % gzip -d mysql.dump.full.20140128.gz
francois@belzebot ~ % mysql -u root -p < mysql.dump.full.20140128    
Enter password:  
francois@belzebot ~ % mysql -u root -p perso
Enter password:  
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.5.35-0+wheezy1 (Debian)
 
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
mysql> select max(ref) from statcourses ;
+----------+
| max(ref) |
+----------+
|      976 |
+----------+
1 row in set (0.00 sec)
 
mysql> select count(ref) from statcourses ;
+------------+
| count(ref) |
+------------+
|        962 |
+------------+
1 row in set (0.00 sec)
 
mysql>  


 
L écart est flagrant...et c'est ça mon souci bien sur  ;)  
 
ce que j'ai tenté :

mysql> alter table statcourses auto_increment=1 ;
Query OK, 962 rows affected (0.74 sec)
Records: 962  Duplicates: 0  Warnings: 0
 
mysql> select max(ref) from statcourses ;
+----------+
| max(ref) |
+----------+
|      976 |
+----------+
1 row in set (0.00 sec)
 
mysql>


 
on voit bien là que ça ne marche pas, mon max(ref) est tjrs faux et pas ramené à l'équivalant de count(ref)...
J'ai beau googler je  ne trouve que cette methode là pourtant...
vous avez une idée ?
 
une methode qui marche ?
(si possible sans interruption de service) me ferai mal de supprimer la table/recréer la table surtout que l'idée et après coup de faire un trigger sur suppression de ligne pour recréer ces id/ref.... pour éviter que ce cas ne soit tout simplement possible ...
 
 
Merci
 :hello:  ;)


Message édité par goblin_rieur le 28-01-2014 à 19:37:52

---------------
Collectionner les vieux serveurs c'est chouette mais c'est lourd et ça prend de la place ;)
Reply

Marsh Posté le 28-01-2014 à 18:36:47   

Reply

Marsh Posté le 28-01-2014 à 19:37:04    

Dans la famille "je suis un ane, j'aurai du y penser"  
 

mysql> set @count=0 ;                                                                                                                                                                                        
Query OK, 0 rows affected (0.00 sec)
 
mysql> select max(ref) from statcourses ;                                                                                                                                                                    
+----------+
| max(ref) |
+----------+
|      976 |
+----------+
1 row in set (0.00 sec)
 
mysql> UPDATE statcourses SET statcourses.ref = @count:= @count + 1;                                                                                                                                          
Query OK, 961 rows affected (0.20 sec)
Rows matched: 962  Changed: 961  Warnings: 0
 
mysql> select max(ref) from statcourses ;                                                                                                                                                                    
+----------+
| max(ref) |
+----------+
|      962 |
+----------+
1 row in set (0.00 sec)
 
mysql>  


 
 
la solution était pourtant simple  
set @count=0 ;
UPDATE statcourses SET statcourses.ref = @count:= @count + 1;  

 
 
 :hello:  


---------------
Collectionner les vieux serveurs c'est chouette mais c'est lourd et ça prend de la place ;)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed