Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://tamachoblogger.blog103.fc2.com/tb.php/88-cc777233

-件のトラックバック

-件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

【技術メモ - SQL】FOREIGN KEY制約の注意

今日はSQLのお話。ちなみに使用しているDBはMySQL。

外部キーを持つテーブルを作ろうとして、

CREATE TABLE IF NOT EXISTS テーブル名1 (
  列名1 INT(6) UNSIGNED,
  列名2 TINYINT(2) UNSIGNED,
  列名3 CHAR(10),
  PRIMARY KEY (列名1, 列名2, 列名3),
  FOREIGN KEY (列名1) REFERENCES テーブル名2 (列名1),
  FOREIGN KEY (列名2) REFERENCES テーブル名2 (列名2),
  FOREIGN KEY (列名3) REFERENCES テーブル名3 (列名3)
);

というSQL文を実行したが、どうしてもエラーが出てしまって作成できなかった。

エラーメッセージから色々調べた結果、どうやら外部キーのところでエラーを起こしているみたい。
ということで列の型やらサイズ、符号の有無などが参照先と違っていないか調べたが、特に問題はない。
どうしたものかと思い、とりあえずMySQLのリファレンスを見てみたら、FOREIGN KEYは一度に複数の列を指定できる・・・。
「もしや!?」と思い、試しに上のSQL文を

CREATE TABLE IF NOT EXISTS テーブル名1 (
  列名1 INT(6) UNSIGNED,
  列名2 TINYINT(2) UNSIGNED,
  列名3 CHAR(10),
  PRIMARY KEY (列名1, 列名2, 列名3),
  FOREIGN KEY (列名1) REFERENCES テーブル名2 (列名1),
  FOREIGN KEY (列名2) REFERENCES テーブル名2 (列名2),
  FOREIGN KEY (列名1, 列名2) REFERENCES テーブル名2 (列名1, 列名2),
  FOREIGN KEY (列名3) REFERENCES テーブル名3 (列名3)
);

に書きなおしてみたら、テーブル作成成功!

つまりはこういうことらしい。

同じテーブルを参照する複数の外部キーはひとつにまとめて宣言する必要がある。


しかし何で、別々に宣言しちゃいけないんだろう?
スポンサーサイト
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://tamachoblogger.blog103.fc2.com/tb.php/88-cc777233

0件のトラックバック

0件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

Appendix

プロフィール

たまちょ

名前:たまちょ
性別:男
年齢:23
職業:プログラマー(見習い)

長続きしないダメブロガー。
過去2つのブログを運営するも、あっという間に閉鎖させた経歴を持つ。

リンク


「たまちょはブロガーの夢を見るか?」はリンクフリーです。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。