我試圖刪除並重新創建一個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
的文件中,無論這是什麼。
看起來'ENGINE = InnoDB'被忽略。如果我沒有弄錯,'.frm'表示MyISAM表存儲。通過使用'show engine innodb status'確認InnoDB是否真的可用, –
@a_horse,謝謝。我嘗試了'show engine ...'命令,並且在我看來,反應顯示InnoDB可用(最近的時間戳等等)。 –
您是否在模式重新創建之前修改了這些表格?有沒有錯誤? – Devart