![]() | |
![]() |
| | Thread Tools | Display Modes |
#1
| |||
| |||
|
#2
| |||
| |||
|
|
I'm trying to create foreign key constraints and keep getting an error message 1005 (I did look it up, but didn't see an obvious solution to fixing this for my database). The version I'm using is 5.0.17-max. I used Mysql WorkBench to create the database schema and had it generate the sql script. I created a table as such: CREATE TABLE `ows`.`FilmsRatings` ( `RatingID` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `Rating` VARCHAR(50) NULL, PRIMARY KEY (`RatingID`) ) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci; Then, I created another table as such: CREATE TABLE `ows`.`Films` ( `FilmID` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `MovieTitle` TEXT NULL, `PitchText` TEXT NULL, `AmountBudgeted` DECIMAL(11, 0) NULL, `RatingID` INT(11) NULL, `Summary` LONGTEXT NULL, `ImageName` VARCHAR(50) NULL, `DateInTheaters` DATETIME NULL, PRIMARY KEY (`FilmID`), CONSTRAINT `FK_RatingID` FOREIGN KEY `RatingID` (`(not null)`) REFERENCES `ows`.`FilmsRatings` (`RatingID`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci; And got this following error message: ERROR 1072 (42000): Key column '(not null)' doesn't exist in table I tried again, this time deleting the CONSTRAINTs details. Then I tried to alter the table as such: mysql> alter table films -> add constraint fk_films_ratings -> foreign key (RatingID) references FilmsRatings (RatingID); Which produced this error message: ERROR 1005 (HY000): Can't create table './ows/#sql-a8_11.frm' (errno: 150) mysql> drop table films; This database is being run with InnoDB engine, so I should be able to create the foreign key constraints. So why is this happening? |
#3
| |||
| |||
|
|
1) I'm not sure what you are intending with "(`(not null)`)" in the middle of your foreign key definition, but that isn't valid mysql syntax. See the manual for the correct syntax http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html>. |
|
2) In FilmsRatings, RatingID is defined as INT UNSIGNED, but in Films it is an INT. The manual says |
|
3) Again quoting the manual, "You can use SHOW ENGINE INNODB STATUS to display a detailed explanation of the most recent InnoDB foreign key error in the server." |
#4
| |||
| |||
|
|
Lola, />And got this following error message: ERROR 1072 (42000): Key column '(not null)' doesn't exist in table / Yes, it's telling you what;s wrong: to define a constraint on a key, the table def must first define the key. |
#5
| |||
| |||
|
|
Michael Stassen wrote: 1) I'm not sure what you are intending with "(`(not null)`)" in the middle of your foreign key definition, but that isn't valid mysql syntax. See the manual for the correct syntax http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html>. This is from the script that was generated using Mysql Workbench, 1.0.3-alpha. I tried it with (null) and (not null); neither worked. 2) In FilmsRatings, RatingID is defined as INT UNSIGNED, but in Films it is an INT. The manual says I then modified the query as such: CREATE TABLE `ows`.`Films` ( `FilmID` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `MovieTitle` TEXT NULL, `PitchText` TEXT NULL, `AmountBudgeted` DECIMAL(11, 0) NULL, `RatingID` INT(11) UNSIGNED NULL, `Summary` LONGTEXT NULL, `ImageName` VARCHAR(50) NULL, `DateInTheaters` DATETIME NULL, PRIMARY KEY (`FilmID`), CONSTRAINT `FK_RatingID` FOREIGN KEY `RatingID` (`(not null)`) REFERENCES `ows`.`FilmsRatings` (`RatingID`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci; No dice. 3) Again quoting the manual, "You can use SHOW ENGINE INNODB STATUS to display a detailed explanation of the most recent InnoDB foreign key error in the server." Which gives me: LATEST FOREIGN KEY ERROR ------------------------ 060207 8:33:49 Error in foreign key constraint of table ows/#sql-a8_11: foreign key (RatingID) references FilmsRatings (RatingID): Cannot find an index in the referenced table where the referenced columns appear as the first columns, or column types in the table and the referenced table do not match for constraint. Note that the internal storage type of ENUM and SET changed in tables created with >= InnoDB-4.1.12, and such columns in old tables cannot be referenced by such columns in new tables. See http://dev.mysql.com/doc/mysql/en/In...nstraints.html for correct foreign key definition. Which leads me back to the same URL that you gave me. so, it looks like I should create an index for FilmsRatings first, and then create the table Films - is that correct? |
#6
| |||
| |||
|
|
Hello. The query which is works is: |
#7
| |||
| |||
|
|
Gleb Paharenko wrote: Hello. The query which is works is: Thanks - just what I needed. Looks like I'll need to be extra careful with sql scripts generated from Mysql Workbench, which is still alpha right now. |
![]() |
| Thread Tools | |
| Display Modes | |
| |