2017-11-29 11 views
0

私は2つのテーブルtable1とtable2を持っています table1はIDと名前を持ち、table2はID、インスタンス(外部キーfromtable1)、ホスト名1とホスト名feildsを持っています。私はそれは私にエラーをスローする外部キーを持つテーブル2を作成しようとしていますとき 外部キー制約が間違って形成されているmysql

mysql> CREATE TABLE table1 (
    -> id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    -> name VARCHAR(50) 
    ->); 

TABLE1

を作成

"ERROR 1005 (HY000): Can't create table `databasename`.`table2` (errno: 150 "Foreign key constraint is incorrectly formed")" 

コードが

mysql> CREATE TABLE table2(
    -> id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    -> instance VARCHAR(50) NOT NULL, 
    -> hostname1 VARCHAR(50) NOT NULL, 
    -> hostname2 VARCHAR(50) NOT NULL, 
    -> CONSTRAINT `fk_name` 
    -> FOREIGN KEY(instance) REFERENCES table1(name) 
    -> ON DELETE CASCADE 
    -> ON UPDATE RESTRICT 
    ->); 

は私が間違って何をやっていますここに?

+0

一意である必要があります に名前を付ける必要がある場合(あるいは少なくとも、本当に、本当にべきではありません)特有のものではない列または主キーを参照。 – fredrik

+0

私の答えを確認 –

答えて

0

name VARCHAR(50)は表1ではnot nullであり、表2ではnullableである。 nullではないname

instanceマップ

-> instance VARCHAR(50) NOT NULL, 
1

FKべきPKやUNIQUEフィールドを参照します。

table2(インスタンス)をtable1主キー(INT)と同じ型にし、table1(id)を参照するようにすることができます。

か、参照はできませんので私の知る限りそうTABLE1(名前は)

+0

私は名前を一意にすることはできますか? – panda

+0

'のMySQL>テーブルtable1を作成する( - > ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY、 - >名VARCHAR(50)NOT NULL、UNIQUE - >)。 ' –

+0

名前フィールドをユニークな作品にしました。 – panda

関連する問題