2010-03-17 82 views
2

我有一張表,它不會刪除一行。特別是,當我嘗試刪除任何超過150000000的GEO_SHAPE_ID的行時,它並不會從數據庫中消失。無法從MySQL中刪除行

我曾嘗試:

  1. SQLyog的將其刪除。
  2. 從表中刪除 GEO_SHAPE_ID = 150000042(0行 影響)。
  3. UNLOCK TABLES 2.然後

據我所知,BIGINT是AUTO_INCREMENT有效候選人。任何人都知道會發生什麼事? 每當我執行上述任何操作並刷新表格列表時,該行就會重新出現。 你必須幫助我們,Doc。我們已經試過了,我們都沒有想法!

DJS。

編輯:按照瓦薩洛丹尼爾的建議:

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

答:在發現「檢查」和「修復」命令,在MySQL後,我發現腐敗的鑰匙,因此固定的,它的工作。

PS。這裏是表格結構和一些示例數據只是爲了咯咯地笑。

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;

2

與您的數據就試了一下,和它的工作如預期:

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; 
+0

http://jcooney.net/archive/2007/02/01/42999.aspx – 2010-03-17 00:13:19

+0

@Wilhelm:呵呵,真的......我的目的是要表明看起來問題在別的地方,因爲這是預計將按預期工作。 – 2010-03-17 00:15:39

+0

啊哈!一個線索... mysql> SELECT * FROM'GEO_SHAPE' WHERE GEO_SHAPE_ID = 150000042; 空集(0.01秒) – Drew 2010-03-17 00:27:41

2

轉到Sequel Pro右上角的Console。右鍵單擊無法運行的命令並將其複製。

將它粘貼到Sequel Pro頂部的Query部分並手動運行。

這將允許您查看阻止行被刪除並修復的錯誤。