2010-03-17 8 views
2

J'ai une table, qui ne supprime pas une ligne. Plus précisément, lorsque j'essaie de supprimer une ligne avec un GEO_SHAPE_ID sur 150000000, il ne disparaît tout simplement pas de la base de données.Impossible de supprimer une ligne de MySQL

J'ai essayé:

  1. SQLyog pour l'effacer.
  2. SUPPRIMER DU TABLEAU O WH GEO_SHAPE_ID = 150000042 (0 lignes affecté).
  3. UNLOCK TABLES puis 2.

Pour autant que je sache, bigint est un candidat valable pour auto_increment. Quelqu'un sait ce qui pourrait être en place? Chaque fois que j'effectue l'une des opérations ci-dessus et actualise la liste de la table, la ligne réapparaît. Vous devez nous aider, Doc. Nous avons essayé rien et nous sommes tous à court d'idées!

DJS.

EDIT: selon la suggestion de Daniel Vassallo:

mysql> SELECT * FROM `GEO_SHAPE` WHERE GEO_SHAPE_ID = 150000042; 
Empty set (0.01 sec) 

RÉPONSE: Après avoir découvert le « contrôle » et « réparer » les commandes de MySQL, j'ai trouvé les clés endommagées, donc fixé ceux-ci et cela a fonctionné.

PS. Voici la construction de la table et quelques exemples de données juste pour rire.

CREATE TABLE `GEO_SHAPE` (
    `GEO_SHAPE_ID` bigint(11) NOT NULL auto_increment, 
    `RADIUS` float default '0', 
    `LATITUDE` float default '0', 
    `LONGITUDE` float default '0', 
    `SHAPE_TYPE` enum('Custom','Region') default NULL, 
    `PARENT_ID` int(11) default NULL, 
    `SHAPE_POLYGON` polygon default NULL, 
    `SHAPE_TITLE` varchar(45) default NULL, 
    `SHAPE_ABBREVIATION` varchar(45) default NULL, 
    PRIMARY KEY (`GEO_SHAPE_ID`) 
) ENGINE=MyISAM AUTO_INCREMENT=150000056 DEFAULT CHARSET=latin1 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC; 

SET FOREIGN_KEY_CHECKS = 0; 

LOCK TABLES `GEO_SHAPE` WRITE; 
INSERT INTO `GEO_SHAPE` (`GEO_SHAPE_ID`, `RADIUS`, `LATITUDE`, `LONGITUDE`, `SHAPE_TYPE`, `PARENT_ID`, `SHAPE_POLYGON`, `SHAPE_TITLE`, `SHAPE_ABBREVIATION`) VALUES (57, NULL, NULL, NULL, 'Region', 10, NULL, 'Washington', 'WA'); 
INSERT INTO `GEO_SHAPE` (`GEO_SHAPE_ID`, `RADIUS`, `LATITUDE`, `LONGITUDE`, `SHAPE_TYPE`, `PARENT_ID`, `SHAPE_POLYGON`, `SHAPE_TITLE`, `SHAPE_ABBREVIATION`) VALUES (58, NULL, NULL, NULL, 'Region', 10, NULL, 'West Virginia', 'WV'); 
INSERT INTO `GEO_SHAPE` (`GEO_SHAPE_ID`, `RADIUS`, `LATITUDE`, `LONGITUDE`, `SHAPE_TYPE`, `PARENT_ID`, `SHAPE_POLYGON`, `SHAPE_TITLE`, `SHAPE_ABBREVIATION`) VALUES (59, NULL, NULL, NULL, 'Region', 10, NULL, 'Wisconsin', 'WI'); 
INSERT INTO `GEO_SHAPE` (`GEO_SHAPE_ID`, `RADIUS`, `LATITUDE`, `LONGITUDE`, `SHAPE_TYPE`, `PARENT_ID`, `SHAPE_POLYGON`, `SHAPE_TITLE`, `SHAPE_ABBREVIATION`) VALUES (150000042, 10, -33.8833, 151.217, 'Custom', NULL, NULL, 'Sydney%2C%20New%20South%20Wales%20%2810km%20r', NULL); 
INSERT INTO `GEO_SHAPE` (`GEO_SHAPE_ID`, `RADIUS`, `LATITUDE`, `LONGITUDE`, `SHAPE_TYPE`, `PARENT_ID`, `SHAPE_POLYGON`, `SHAPE_TITLE`, `SHAPE_ABBREVIATION`) VALUES (150000043, 10, -33.8833, 151.167, 'Custom', NULL, NULL, 'Annandale%2C%20New%20South%20Wales%20%2810km%', NULL); 
INSERT INTO `GEO_SHAPE` (`GEO_SHAPE_ID`, `RADIUS`, `LATITUDE`, `LONGITUDE`, `SHAPE_TYPE`, `PARENT_ID`, `SHAPE_POLYGON`, `SHAPE_TITLE`, `SHAPE_ABBREVIATION`) VALUES (150000048, 10, -27.5, 153.017, 'Custom', NULL, NULL, 'Brisbane%2C%20Queensland%20%2810km%20radius%2', NULL); 
INSERT INTO `GEO_SHAPE` (`GEO_SHAPE_ID`, `RADIUS`, `LATITUDE`, `LONGITUDE`, `SHAPE_TYPE`, `PARENT_ID`, `SHAPE_POLYGON`, `SHAPE_TITLE`, `SHAPE_ABBREVIATION`) VALUES (150000045, 10, 43.1002, -75.2956, 'Custom', NULL, NULL, 'New%20York%20Mills%2C%20New%20York%20%2810km%', NULL); 
INSERT INTO `GEO_SHAPE` (`GEO_SHAPE_ID`, `RADIUS`, `LATITUDE`, `LONGITUDE`, `SHAPE_TYPE`, `PARENT_ID`, `SHAPE_POLYGON`, `SHAPE_TITLE`, `SHAPE_ABBREVIATION`) VALUES (150000046, 10, 40.1117, -78.9258, 'Custom', NULL, NULL, 'Region1', NULL); 
UNLOCK TABLES; 

SET FOREIGN_KEY_CHECKS = 1; 

Répondre

3

problème a été table corrompue. J'ai corrigé ceci avec 'CHECK TABLE GEO_SHAPE;' et puis 'REPAIR TABLE GEO_SHAPE;

2

juste essayé avec vos données, et cela a fonctionné comme prévu:

DELETE FROM `GEO_SHAPE` WHERE GEO_SHAPE_ID = 150000042; 
-- Query OK, 1 row affected (0.00 sec) 

Résultat:

+--------------+--------+----------+-----------+------------+-----------+---------------+-----------------------------------------------+--------------------+ 
| GEO_SHAPE_ID | RADIUS | LATITUDE | LONGITUDE | SHAPE_TYPE | PARENT_ID | SHAPE_POLYGON | SHAPE_TITLE         | SHAPE_ABBREVIATION | 
+--------------+--------+----------+-----------+------------+-----------+---------------+-----------------------------------------------+--------------------+ 
|   57 | NULL |  NULL |  NULL | Region  |  10 | NULL   | Washington         | WA     | 
|   58 | NULL |  NULL |  NULL | Region  |  10 | NULL   | West Virginia         | WV     | 
|   59 | NULL |  NULL |  NULL | Region  |  10 | NULL   | Wisconsin          | WI     | 
| 150000043 |  10 | -33.8833 | 151.167 | Custom  |  NULL | NULL   | Annandale%2C%20New%20South%20Wales%20%2810km% | NULL    | 
| 150000048 |  10 | -27.5 | 153.017 | Custom  |  NULL | NULL   | Brisbane%2C%20Queensland%20%2810km%20radius%2 | NULL    | 
| 150000045 |  10 | 43.1002 | -75.2956 | Custom  |  NULL | NULL   | New%20York%20Mills%2C%20New%20York%20%2810km% | NULL    | 
| 150000046 |  10 | 40.1117 | -78.9258 | Custom  |  NULL | NULL   | Region1          | NULL    | 
+--------------+--------+----------+-----------+------------+-----------+---------------+-----------------------------------------------+--------------------+ 

Avez-vous essayé:

SELECT * FROM `GEO_SHAPE` WHERE GEO_SHAPE_ID = 150000042; 
+0

http://jcooney.net/archive/2007/02/01/42999.aspx –

+0

@Wilhelm: Hehe, true ... Mon intention était de montrer qu'il semble que le problème est ailleurs, parce que c'est devrait fonctionner comme prévu. –

+0

Ah-ha! Un indice ... mysql> SELECT * FROM 'GEO_SHAPE' O WH GEO_SHAPE_ID = 150000042; Ensemble vide (0,01 sec) – Drew

2

Accédez au Console, dans l'angle supérieur droit de Sequel Pro. Cliquez avec le bouton droit sur la commande qui n'a pas pu être exécutée et copiez-la.

Collez-le dans la section Query en haut de Sequel Pro et exécutez-le manuellement.

Cela vous permettra de voir l'erreur qui empêche la ligne d'être supprimée et de la réparer.