2011-04-27 2 views
0

Mon programme est vraiment simple, il insère la même valeur dans une colonne et met à jour l'horodatage et la date sur une autre colonne. Il possède également une colonne d'identifiant auto-incrémentée qui agit comme la clé primaire de la table.entrée en double à la clé primaire mysql

+-------+------------+------+-----+-------------------+-----------------------------+ 
| Field | Type  | Null | Key | Default   | Extra      | 
+-------+------------+------+-----+-------------------+-----------------------------+ 
| id | bigint(20) | NO | PRI | NULL    | auto_increment    | 
| Power | float  | YES |  | NULL    |        | 
| dt | timestamp | NO |  | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | 
+-------+------------+------+-----+-------------------+-----------------------------+ 

au moment où je suis coincé avec id = 4000Power = 40996 et dt = recent date time

Dès que je tente d'exécuter une commande qui insère des données dans la table, je reçois une erreur qui indique

entrée en double '4971' pour la clé 'primaire'

check table:

+----------------+-------+----------+-----------------------------------------------------------+ 
| Table   | Op | Msg_type | Msg_text             | 
+----------------+-------+----------+-----------------------------------------------------------+ 
| newdb.newmeter | check | warning | Table is marked as crashed        | 
| newdb.newmeter | check | warning | 19 clients are using or haven't closed the table properly | 
| newdb.newmeter | check | warning | Size of datafile is: 68816  Should be: 68663   | 
| newdb.newmeter | check | error | Found 4048 keys of 4039         | 
| newdb.newmeter | check | error | Corrupt             | 
+----------------+-------+----------+-----------------------------------------------------------+ 
+1

Quelle est votre requête d'insertion? – piotrm

+0

insérer dans les valeurs newdb.newmeter (Power) (40997); – rasmalai

+0

@piotrm insérer dans les valeurs newdb.newmeter (Power) (40997); – rasmalai

Répondre

1

Sauvegardez vos données. Si vous pouvez vous permettre d'arrêter mysqld, vous devriez le faire et utiliser myisamchk pour réparer la table. Si ce n'est pas une option, essayez de faire FLASH TABLES; et REPAIR TABLE newmeter; Soyez prêt à ce que les données de votre tableau ne soient pas très précises.

+0

merci piotrm "table de réparation" travaillé et maintenant je suis capable d'utiliser la même table à nouveau. mais je pense que cela va prendre beaucoup de temps pour construire la base de données worht de l'année je suis sûr qu'il y a quelque chose que je peux faire en Excel et vider le fichier directement à mysql afin que je puisse avoir une base de données avec horodatage une année. toute suggestion? merci beaucoup pour l'aide – rasmalai

+1

Je vous déconseillerait d'utiliser Excel ou tout ce qui n'est pas lié à mysql lui-même. Assurez-vous de toujours avoir une copie des fichiers de table que vous avez sauvegardés et essayez différentes choses, en utilisant les instructions du manuel en ligne de mysql. http://dev.mysql.com/doc/refman/5.6/fr/myisam-repair.html – piotrm

Questions connexes