2011-01-02 19 views
2

MySQLの外部キーの問題は、ここでは、外部キー追加と間違っている何

mysql> create table notes ( 
    id int (11) NOT NULL auto_increment PRIMARY KEY, 
    note_type_id smallint(5) NOT NULL, 
    data TEXT NOT NULL, 
    created_date datetime NOT NULL, 
    modified_date timestamp NOT NULL on update now()) 
    Engine=InnoDB; 
Query OK, 0 rows affected (0.08 sec) 

mysql> create table notetypes ( 
     id smallint (5) NOT NULL auto_increment PRIMARY KEY, 
     type varchar(255) NOT NULL UNIQUE) 
     Engine=InnoDB; 
Query OK, 0 rows affected (0.00 sec) 


mysql> alter table `notes` add constraint 
     foreign key(`note_type_id`) references `notetypes`.`id` 
     on update cascade on delete restrict; 
ERROR 1005 (HY000): Can't create table './admin/#sql-43e_b762.frm' (errno: 150) 

おかげ

JP

+0

を試してみてください、あなたは、作成前にFKを無効にし、その後、それを再度有効にすることはできますか? 'set foreign_key_checks = 0;' ... – Konerak

+1

両方のテーブルを削除しました。 'set foreign_key_checks = 0;'を実行してテーブルを作成し、次に外部キーを追加しました。しかし、まだ同じエラー。 –

+0

Hmm。 'SHOW INNODB STATUS;'は外部キーエラーの下で何を表示しますか? – Konerak

答えて

0
mysql> create table notes (id int (11) NOT NULL auto_increment PRIMARY KEY, note_type_id smallint(5) NOT NULL, data TEXT NOT NULL, created_date datetime NOT NULL, modified_date timestamp NOT NULL on update now()) Engine=InnoDB; 
Query OK, 0 rows affected (0.38 sec) 

mysql> create table notetypes (id smallint (5) NOT NULL auto_increment PRIMARY KEY, type varchar(255) NOT NULL UNIQUE) Engine=InnoDB; 
Query OK, 0 rows affected (0.74 sec) 

mysql> alter table `notes` add constraint foreign key(`note_type_id`) references notetypes (id) on update cascade on delete restrict; 
Query OK, 0 rows affected (0.64 sec) 
Records: 0 Duplicates: 0 Warnings: 0 
+0

ありがとう!それは動作します...したがって、mysqlはこの場合構文エラーではなくクレイジーエラーを返します。 –

1

は私がFKを命名することが必要だと思います。

ALTER TABLE `test`.`notes` ADD CONSTRAINT `note_type_id` FOREIGN KEY `note_type_id` (`note_type_id`) 
    REFERENCES `notetypes` (`id`) 
    ON DELETE RESTRICT 
    ON UPDATE CASCADE; 
+0

同じエラーが発生しました。私はmysqlが内部的に匿名キーの名前を付けていると思います。私は過去に匿名のキー/制約を使用しています。 –

+0

非常に奇妙です...私はあなたの3つのクエリを実行し、インデックス作成で同じエラーを受け取りました。 上記のクエリを実行すると、私のために正常に動作しました - 非常に奇妙です... – bob

+0

それは?もう一度やり直してみましょう。あなたが上に書いたことを忘れたかもしれません。 –