mysql - DROP SCHEMA 后留下的旧表碎片

标签 mysql

我正在尝试删除并重新创建一个 MySQL 模式,但是当我这样做时,旧模式的片段似乎重新出现。

我有一个脚本来创建新的模式...

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

DROP SCHEMA IF EXISTS `scunthorpe` ;

CREATE SCHEMA IF NOT EXISTS `scunthorpe` DEFAULT CHARACTER SET latin1 ;
USE `scunthorpe` ;

DROP TABLE IF EXISTS `location` ;

CREATE  TABLE IF NOT EXISTS `location` (
      `id_location` INT NOT NULL AUTO_INCREMENT ,
      `location` VARCHAR(45) NOT NULL ,
    PRIMARY KEY (`id_location`) )
    ENGINE = InnoDB
    DEFAULT CHARACTER SET = latin1;

DROP TABLE IF EXISTS `strand` ;

CREATE  TABLE IF NOT EXISTS `strand` (
    `id_location` INT NOT NULL ,
    `id_strand` INT NOT NULL ,
    `notes` VARCHAR(45) NOT NULL ,
  PRIMARY KEY (`id_location`, `id_strand`) ,
  INDEX `strand_location_fkey` (`id_location` ASC) ,
  CONSTRAINT `strand_location_fkey`
  FOREIGN KEY (`id_location` )
      REFERENCES `location` (`id_location` )
      ON DELETE CASCADE
      ON UPDATE CASCADE)
  ENGINE = InnoDB
  DEFAULT CHARACTER SET = latin1;

这会产生错误:

ERROR 1005 (HY000): Can't create table '.\scunthorpe\strand.frm' (errno: 150)

仔细阅读 show innodb status 揭示了以下内容:-

111021 10:46:17 Error in foreign key constraint of table scunthorpe/straightenin
g_temperature:
there is no index in referenced table which would contain
the columns as the first columns, or the data types in the
referenced table do not match to the ones in table. Constraint:
,
  CONSTRAINT straightening_to_strand_fkey FOREIGN KEY (id_location, id_sequence,
 id_strand) REFERENCES strand (id_location, id_sequence, id_strand)

现在,大约在诺曼征服时期,架构中就有这样一张表。但是 drop schema 应该摆脱它,不是吗?那么有人知道为什么会再次出现这种情况以及我应该怎么做吗?

编辑 1

根据 devart 的建议,我尝试了 REPAIR TABLE 但这显然不支持 InnoDB。我检查了这些文件,发现模式目录在 DROP SCHEMA 语句之后被删除,并在 CREATE SCHEMA 上重新创建,正如人们所期望的那样。特工 Ransack 透露违规字符串 straightening_to_strand_fkey 存在于名为 ibdata1 的文件中,无论它是什么。

最佳答案

也许这个建议将有助于解决问题:

关于mysql - DROP SCHEMA 后留下的旧表碎片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7848446/

相关文章:

python - MySql 服务器上的 Django 模型导出

SQL LEFT JOIN 帮助

php - 如何使用 joomla 2.5 中的外部文件访问登录用户数据?

java - 运行主类时出现 org.apache.openjpa.persistence.ArgumentException

mysql - 为 DueDate 和 DueTime 字段为不同列的表更新大于今天日期和时间的记录

mysql - 使用docker compose并使用mariadb 10.4.8 docker容器对用户 'root' @'localhost'的访问被拒绝,并在附加外部卷时发出

mysql - 小写数据库中的所有表名?

php - Laravel - Eloquent 关系 belongsToMany groupBy "Syntax error or access violation"错误

mysql - 为规划事件 Web 应用程序设计设备库存 mysql 数据库表的建议

mysql - 删除除一个优化查询之外的所有重复项