Не удается удалить строку из MySQL
У меня есть таблица, которая не будет удалять строку. В частности, когда я пытаюсь удалить любую строку с GEO_SHAPE_ID более 150000000, она просто не исчезает из БД.
Я пробовал:
- SQLyog, чтобы стереть его.
- УДАЛИТЬ ИЗ ТАБЛИЦЫ, ГДЕ GEO_SHAPE_ID = 150000042 (0 строк пораженный).
- разблокируйте таблицы , затем 2.
Насколько мне известно, bigint является допустимым кандидатом на auto_increment. Кто-нибудь знает, что может случиться? Всякий Раз, Когда Я выполните любую из вышеперечисленных операций и обновите список таблиц, строка снова появится. Вы должны помочь нам, док. Мы ничего не пробовали, и у нас кончились идеи!
Ди-джеи.
Правка: согласно предложению Даниэля Вассалло:
mysql> SELECT * FROM `GEO_SHAPE` WHERE GEO_SHAPE_ID = 150000042;
Empty set (0.01 sec)
Ответ: после обнаружения команд 'check' и 'repair' в MySQL я нашел поврежденные ключи, поэтому исправил их, и это сработало.
ПС. Вот конструкция таблицы и некоторые примеры данных просто для смеха.
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;
3 ответа:
Проблема заключалась в поврежденной таблице. Я исправил это с помощью 'CHECK TABLE GEO_SHAPE;' и затем ' REPAIR TABLE GEO_SHAPE;
Просто попробовал его с вашими данными, и он работал, как ожидалось:
DELETE FROM `GEO_SHAPE` WHERE GEO_SHAPE_ID = 150000042; -- Query OK, 1 row affected (0.00 sec)
Результат:
+--------------+--------+----------+-----------+------------+-----------+---------------+-----------------------------------------------+--------------------+ | 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 | +--------------+--------+----------+-----------+------------+-----------+---------------+-----------------------------------------------+--------------------+
Вы пробовали:
SELECT * FROM `GEO_SHAPE` WHERE GEO_SHAPE_ID = 150000042;
Перейдите к
Вставьте его в разделConsole
, в правом верхнем углу Sequel Pro. Щелкните правой кнопкой мыши на команде, которая не была выполнена, и скопируйте ее.Query
в верхней части Sequel Pro и запустите его вручную.Это позволит вам увидеть ошибку, которая препятствует удалению строки, и исправить ее.