2011-10-21 20 views
1

我試圖刪除並重新創建一個MySQL模式,但是當我這樣做時,舊模式的碎片似乎重新出現。DROP SCHEMA後留下的舊錶碎片

我有一個腳本來創建這樣的新模式......

SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0; 
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; 
SET @[email protected]@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) 

現在諾曼征服時大約有這樣的表格。但丟棄模式應該擺脫它,不是嗎?所以有人知道爲什麼這會再現,我該怎麼辦?

編輯1

至於建議的devart,我試過REPAIR TABLE,但這顯然是不支持的InnoDB。我檢查了這些文件,發現在DROP SCHEMA聲明之後架構目錄已被刪除,並在CREATE SCHEMA上重新創建,正如人們所期望的那樣。代理Ransack透露有問題的字符串straightening_to_strand_fkey出現在名爲ibdata1的文件中,無論這是什麼。

+0

看起來'ENGINE = InnoDB'被忽略。如果我沒有弄錯,'.frm'表示MyISAM表存儲。通過使用'show engine innodb status'確認InnoDB是否真的可用, –

+0

@a_horse,謝謝。我嘗試了'show engine ...'命令,並且在我看來,反應顯示InnoDB可用(最近的時間戳等等)。 –

+0

您是否在模式重新創建之前修改了這些表格?有沒有錯誤? – Devart

回答