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;
Annonceindlæg fra Novataris
16. oktober 2010 - 17:08
#1
Har løst det.. Det ID en FK peger på må åbenbart ikke være unsigned.
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 !
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
20. oktober 2010 - 15:12
#4
Men hvorfor bruge trigger paa en timestamp?
20. oktober 2010 - 22:29
#5
For at kolonnen automatisk bliver opdateret når rækken opdateres?
20. oktober 2010 - 22:40
#6
Goer en TIMESTAMP kolonne ikke det uden trigger?
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
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.
Computerworld tilbyder specialiserede kurser i database-management