Avatar billede henrikhartig Nybegynder
04. januar 2011 - 21:46 Der er 9 kommentarer og
1 løsning

Kan ikke DROP INDEX

Hejsa
Følgende fejl får jeg både på localhost (linux) og på mit webhotel (Suftown).

Når jeg forsøger at fjerne foreign key får jeg fejlen:
mysql> ALTER TABLE Music drop FOREIGN KEY F_MediaTypeID;
ERROR 1025 (HY000): Error on rename of './HenrikHartig/Music' to './HenrikHartig/#sql2-1567-613' (errno: 152)
mysql>     

Det samme med indexet:
mysql> ALTER TABLE Music drop index F_MediaTypeID;
ERROR 1025 (HY000): Error on rename of './HenrikHartig/#sql-1567_613' to './HenrikHartig/Music' (errno: 150)
mysql> 


any ideas?

Hilsen
Henrik


Ved ikke om det er nogen hjælp, men her er Music-tabellen:
CREATE TABLE Music
(
    MusicID         INT         NOT NULL AUTO_INCREMENT
    , F_MediaTypeID     INT         NOT NULL
    , Imagelink         VARCHAR(50)    NULL DEFAULT NULL
    , Performer        VARCHAR(50)    NULL DEFAULT 'Ukendt'
    , Titel            VARCHAR(50)    NULL DEFAULT 'Ukendt'
    , ProductionYear    CHAR(4)        NULL DEFAULT 'Ukendt'
    , F_GenreID        INT         NOT NULL
    , Comments        VARCHAR(200)    NULL

    , INDEX(F_MediaTypeID)
    , FOREIGN KEY (F_MediaTypeID) REFERENCES MediaType(MediaTypeID)
    , PRIMARY KEY(MusicID)
) ENGINE=INNODB;

ALTER TABLE Music
ADD FOREIGN KEY (F_GenreID) REFERENCES Genre(GenreID);
Avatar billede mrgumble Nybegynder
04. januar 2011 - 22:10 #1
Der bliver åbenbart oprettet en KEY sammen med en FOREIGN KEY.
Prøv at køre [code]SHOW CREATE TABLE Music;[/code] og derefter:
[code]ALTER TABLE Music DROP KEY `key_column`;[/code]
Hvor `key_column` vil vise sig som en af KEY-navnene.
og så burde du kunne smide referencen.

(Jeg fandt et godt hint her: http://lists.mysql.com/mysql/204199)
Avatar billede henrikhartig Nybegynder
04. januar 2011 - 22:26 #2
Virker ikke :-(
mysql> SHOW CREATE TABLE Music;
| Music | CREATE TABLE `Music` (
  `MusicID` int(11) NOT NULL auto_increment,
  `F_MediaTypeID` int(11) NOT NULL,
  `Imagelink` varchar(50) collate utf8_unicode_ci default NULL,
  `Performer` varchar(50) collate utf8_unicode_ci default NULL,
  `Titel` varchar(50) collate utf8_unicode_ci default NULL,
  `ProductionYear` char(4) collate utf8_unicode_ci default NULL,
  `F_GenreID` int(11) NOT NULL,
  `Comments` varchar(200) collate utf8_unicode_ci default NULL,
  PRIMARY KEY  (`MusicID`),
  KEY `F_MediaTypeID` (`F_MediaTypeID`),
  KEY `F_GenreID` (`F_GenreID`),
  CONSTRAINT `Music_ibfk_1` FOREIGN KEY (`F_MediaTypeID`) REFERENCES `MediaType` (`MediaTypeID`),
  CONSTRAINT `Music_ibfk_2` FOREIGN KEY (`F_GenreID`) REFERENCES `Genre` (`GenreID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci



mysql> ALTER TABLE Music DROP KEY F_MediaTypeID;
ERROR 1025 (HY000): Error on rename of './HenrikHartig/#sql-1567_613' to './HenrikHartig/Music' (errno: 150)
Avatar billede mrgumble Nybegynder
05. januar 2011 - 07:44 #3
Interessant. Jeg har lige siddet på min egen server (MySQL 5.1.49) og forsøgt at genskabe problemet - og det kan jeg ikke.
Hvilken version af MySQL bruger du?
Avatar billede henrikhartig Nybegynder
05. januar 2011 - 09:08 #4
Det er:
5.0.45
Avatar billede henrikhartig Nybegynder
05. januar 2011 - 09:17 #5
Og på mit Surftown webhotel som har mysql version: 5.1.49-log, lykkedes det heller ikke:

ALTER TABLE Music DROP KEY F_MediaTypeID

MySQL said: Documentation
#1025 - Error on rename of './Henrik4_Hartig/#sql-1ae6_1163132' to './Henrik4_Hartig/Music' (errno: 150)
Avatar billede henrikhartig Nybegynder
05. januar 2011 - 09:19 #6
Måske noget galt med oprettelsen af tabellerne? Music-tabellen er oprettet som øverst i min tråd.

Du får lige de to andre tabeller som Music referer til:
Avatar billede henrikhartig Nybegynder
05. januar 2011 - 09:22 #7
CREATE TABLE MediaType
(
    MediaTypeID    INT NOT NULL AUTO_INCREMENT
    , MediaType    VARCHAR(50) NOT NULL

    , PRIMARY KEY(MediaTypeID)
) ENGINE=INNODB;
Avatar billede henrikhartig Nybegynder
05. januar 2011 - 09:23 #8
CREATE TABLE Genre
(
GenreID    INT NOT NULL AUTO_INCREMENT
, GenreType    CHAR(10) NOT NULL

, PRIMARY KEY(GenreID)
) ENGINE=INNODB;
Avatar billede henrikhartig Nybegynder
06. januar 2011 - 20:10 #9
Du kunne ikke genskabe problemet. Er det fordi du bruger myisam som databaseengine?
Avatar billede henrikhartig Nybegynder
06. januar 2011 - 22:43 #10
Jeg har fundet løsningen. mysql genererer et andet navn for foreign key (CONSTRAINT) som skal fjernes først. Herefter kan index fjernes.

1) ALTER TABLE Music DROP FOREIGN KEY Music_ibfk_1;

2) ALTER TABLE Music DROP INDEX F_MediaTypeID

Du var inde på noget af det rigtige, men jeg måtte selv finde løsningen, så jeg tillader mig ikke at acceptere dit svar.

Men mange tak for din hjælp.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester