2011-05-14 16 views
1

可能性の重複:
MySQL Foreign Key ReferencingMySQLの外部キーの参照

私は私の質問は2つのテーブルを作成したとき前に、私は2000、SQLサーバーにSQL Server 2000を使用している新しい蜂は場所を言うMAとプロジェクトテーブルのプロジェクトは、外部のキーを持っている場所に値を挿入するときに、プロジェクトが更新されている場所のテーブルを参照している外部のキーを持っているプロジェクトテーブルの外部キーに同様の値を挿入する必要はありませんなぜ私は場所に値を挿入を使用して

mysql> create table location(
    -> id int not null, 
    -> primary key(id)) 
    -> engine=innodb; 
Query OK, 0 rows affected (0.11 sec) 


mysql> create table projects(
    -> id int, 
    -> location_id int, 
    -> foreign key(location_id) references location(id) on update cascade on del 
ete cascade) 
    -> engine=innodb; 
Query OK, 0 rows affected (0.31 sec) 


mysql> insert into location values('1') 
Query OK, 1 row affected (0.34 sec) 

mysql> select * from location; 
+----+ 
| id | 
+----+ 
| 1 | 
+----+ 
1 row in set (0.00 sec) 

mysql> select * from projects; 
Empty set (0.00 sec) 

以下のコードをチェックしてください

コマンドを挿入して、プロジェクトにselectコマンドを使用している場合には、外部キーの値を示していないuは上記のコードで見るように、それは価値がに反映されたことをSQL Server 2000で可能でした子テーブルなぜそれはMySqlではできませんなぜ両方のテーブルに値を挿入する必要がありますそれはMySqlで可能です私は場所テーブルにプロジェクトテーブルを自動的に値を選択し、プロジェクトテーブルを照会してください

+1

あなたは数分前に同じ質問を投稿しました。 –

+0

はい、これは間違いなく重複しています。確認する前に私は答えました。良いキャッチ@ypercube! –

答えて

1

更新日 - これまでの回答があると思われる重複した質問に対して同じ回答を投稿しました。

この例でわかるように、カスケードされた更新または削除が実行されるプロジェクトテーブルには何も挿入していません。

私はあなたが次のことを実行しますが、その後にしている行動を示すために、より良い例として示唆している:あなたが見て終わるべきこと

insert into projects values (1,1); 
select * from projects; 
update location set id = 2 where id = 1; 
select * from projects; 

挿入されたプロジェクトの行の最初にlocation_idのはということです1に等しい場合は、場所の更新後、プロジェクトのlocation_idが2に変更されます。

関連する問題