Avatar billede ducks Nybegynder
16. oktober 2010 - 17:00 Der er 7 kommentarer og
1 løsning

Can't create table 'db.#sql-388d_efa' (errno: 150)

Jeg må ikke tilføje FOREIGN KEY `studioID`, får fejlen:
Can't create table 'db.#sql-388d_efa' (errno: 150)

Håber nogen kan forklare den for mig, for kan ikke rigtig finde en løsning på Google



CREATE TABLE `<database name>`.`<table_name>` (
    `movieID` int(10) NOT NULL AUTO_INCREMENT,
    `title` varchar(100) CHARACTER SET latin1 NOT NULL,
    `imdb` char(9) CHARACTER SET latin1 NOT NULL,
    `released` int(4) DEFAULT NULL,
    `runtime` int(4) DEFAULT NULL,
    `website` varchar(50) CHARACTER SET latin1 DEFAULT NULL,
    `studioID` int(10) DEFAULT NULL,
    `added` timestamp NOT NULL ON UPDATE CURRENT_TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    `modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
    PRIMARY KEY (`movieID`),
    CONSTRAINT `movies_studioID` FOREIGN KEY (`studioID`) REFERENCES `<database name>`.`Studios` (`studioID`)  ON UPDATE RESTRICT ON DELETE RESTRICT,
    UNIQUE `imdb`(imdb),
    INDEX `movies_studioID`(studioID)
);

CREATE TRIGGER `on_modify` BEFORE UPDATE ON `<table_name>` FOR EACH ROW BEGIN
    SET new.modified = NOW();
END;
Avatar billede ducks Nybegynder
16. oktober 2010 - 17:08 #1
Har løst det.. Det ID en FK peger på må åbenbart ikke være unsigned.
Avatar billede arne_v Ekspert
16. oktober 2010 - 17:59 #2
`added` timestamp NOT NULL ON UPDATE CURRENT_TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

CREATE TRIGGER `on_modify` BEFORE UPDATE ON `<table_name>` FOR EACH ROW BEGIN
    SET new.modified = NOW();
END;

forstår jeg ikke logikken i !
Avatar billede ducks Nybegynder
20. oktober 2010 - 14:00 #3
Nej fandt den også bagefter det var selvfølgelig en fejl ;) added skal kun rettes når man tilføjer rækken
Avatar billede arne_v Ekspert
20. oktober 2010 - 15:12 #4
Men hvorfor bruge trigger paa en timestamp?
Avatar billede ducks Nybegynder
20. oktober 2010 - 22:29 #5
For at kolonnen automatisk bliver opdateret når rækken opdateres?
Avatar billede arne_v Ekspert
20. oktober 2010 - 22:40 #6
Goer en TIMESTAMP kolonne ikke det uden trigger?
Avatar billede ducks Nybegynder
21. oktober 2010 - 01:52 #7
Nej, ihvertfald ikke i MySQL, man kan sætte den til det, men man kan ikke både have en der har default timestamp og modified timestamp, medmindre det er den samme, så løsningen er triggers
Avatar billede arne_v Ekspert
21. oktober 2010 - 04:11 #8
Hvis du gjorde ADDED feltet til en DATETIME, så havde du kun en TIMESTAMP og kunne bruge standard mekanismen.
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