【问题标题】:Cannot delete row from MySQL无法从 MySQL 中删除行
【发布时间】:2011-01-28 09:07:40
【问题描述】:

我有一个表格,它不会删除一行。具体来说,当我尝试删除 GEO_SHAPE_ID 超过 150000000 的任何行时,它根本不会从数据库中消失。

我试过了:

  1. SQLyog 删除它。
  2. 从表中删除 GEO_SHAPE_ID = 150000042 (0 行 受影响)。
  3. 解锁表格然后 2.

据我所知,bigint 是 auto_increment 的有效候选者。有谁知道会发生什么? 每当我执行上述任何操作并刷新表列表时,该行都会重新出现。 你得帮助我们,博士。我们什么都没试过,但我们都没有想法!

DJ。

编辑:根据 Daniel Vassallo 的建议:

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;

【问题讨论】:

    标签: mysql database delete-row


    【解决方案1】:

    刚刚对您的数据进行了尝试,它按预期工作:

    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;
    

    【讨论】:

    • @Wilhelm:呵呵,是的...我的目的是表明问题似乎出在其他地方,因为预计这会按预期工作。
    • 啊哈!一条线索... mysql> SELECT * FROM GEO_SHAPE WHERE GEO_SHAPE_ID = 150000042;空集(0.01 秒)
    【解决方案2】:

    问题是一个损坏的表。我用'CHECK TABLE GEO_SHAPE;'解决了这个问题然后'修复表 GEO_SHAPE;

    【讨论】:

      【解决方案3】:

      转到位于 Sequel Pro 右上角的Console。右键单击运行失败的命令并复制它。

      将其粘贴到 Sequel Pro 顶部的 Query 部分并手动运行。

      这将允许您查看阻止该行被删除的错误并修复它。

      【讨论】:

      • 谢谢!帮助我找到了阻止删除的外键约束。
      猜你喜欢
      • 2013-07-08
      • 1970-01-01
      • 2013-03-06
      • 2011-02-27
      • 2015-01-21
      • 2016-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多