• ベストアンサー

どれがPrimary Key、ForeignKeyか調べるSQL教えて

pcg733の回答

  • ベストアンサー
  • pcg733
  • ベストアンサー率78% (11/14)
回答No.2

Primary Key(主キー制約)、Foreign Key(参照整合性制約)は共にデータ整合性をチェックする為の「制約」です。 それらはCreate tableやAlter tableというSQL構文で作成することは出来ますが、どの列に設定されているか参照する為のSQL文はありません。 Oracleの場合、User_ConstraintsやUser_Cons_columnsの「データディクショナリ」表をSelect文で表の情報(もちろん制約の情報も)がわかります。 例:Select * from User_Constraints; 他のデータベース(SYBASEとかSQLSERVERとか)は違うかもしれないので確認した方が宜しいと思います。

Kchan
質問者

お礼

pcg733さんのおっしゃるとうり確認してみたところ、データディクショナリ表を見つけることができました。助かりました、ありがとうございます。

関連するQ&A

  • SQLのPRIMARY KEYの後のKEYについて

    SQLの超初心者です。 SQLのPRIMARY KEYの後のKEYについてご教授ください。m(__)m CREATE TABLE ***** (   shipping_id NOT NULL default 0,   order_date datetime NOT NULL default 0000-00-00 00:00:00,     ・     ・   PRIMARY KEY (shipping_id),   KEY order_date (order_date) ) の様に参考書に記載があるのですが、 KEY order_date (order_date) の部分の意味がわかりません。 どなたか詳しい方アドバイスお願いします。

  • TEXTでのPRIMARY KEYの使い方

    customer テーブルを作って、その中にname, email, passwordをそれぞれtext型が入ってます。その後にalter table customer add customer primary key(email);で、emailにprimary keyをつけようとしてるのですが、ERROR1170 Bolb/Text column 'email' used in key specification without a key lengthと言ってます。textの大きさを指定とかするべきなのでしょうか??本当はcreateの最初の段階で、primary keyを入れたかったのですが、その時も同じエラーが出たため、tableを作ってから追加しようと試みてます。他の型で試してみたら、primary keyは難なく追加できました。text型だと何かやり方が違うのでしょうか。ちなみに全てnot nullに設定してあります。回答お願いします。

    • ベストアンサー
    • MySQL
  • 'PRIMARY KEY'と'UNIQUE()'の違いを教えて!

    CREATE TABLE等で出てくる'PRIMARY KEY'と'UNIQUE()'の違いが分かりません。 どちらも他の行と同じ値を登録させないためのものと認識しています。 どのように使い分けるのでしょうか。 あとINDEX()について教えてください。 これは挿入や更新のたびに、INDEXにした列の値の順に整列され、探索が高速になるものと認識しています。 これは'PRIMARY KEY'や'UNIQUE()'の列に対してもやらないといけないのですか。 テーブルは'PRIMARY KEY'や'UNIQUE()'に設定した列の値を基に随時整列されていると思っていたのですが・・・。 あと複数の列へINDEX()を設定することはできるのでしょうか。 その場合、どの列の値が優先的に整列されるのでしょうか。 複数列へINDEX()を設定するCREATE TABLEの書き方を、よろしければ教えてください。

    • ベストアンサー
    • MySQL
  • SQLの書き方

    直前にテーブルに挿入したデータのprimary keyを取得するSQLはどう書けばいいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • MySQL
  • postgresql primary_key

    失礼します。 今回重複データの削除等をしたテーブル 例: ------------------------- id | name | 1 | hoge | 8 | piyo | 12 | temp | ------------------------- このようなserial型でprimary_keyに設定したidの値を1,2,3と振り直したいです。 探してみるともしかしたらそのような事が不可能なのかもと思って投稿しました。 宜しくお願い致します。

  • oracleのプライマリ・キー名の変更

    oracleのテーブル名を変更します。 運用上ネーミングルールとしてプライマリ・キー名はpk_テーブル名としていますので、 プライマリ・キー名もこの時に変更したいのですが、適切な手順を教えてください。 旧テーブル名:table_a 旧プライマリ・キー名:pk_table_a  ↓ ↓ ↓ 新テーブル名:table_b 新プライマリ・キー名:pk_table_b

  • FOREIGN KEYの追加について。

    FOREIGN KEYの追加について。 MySQL5.1.37 CREATE TABLE `goods` ( `id` int NOT NULL AUTO_INCREMENT, `num` int NOT NULL DEFAULT '1', PRIMARY KEY (`id`), index (`num`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `sales` ( `id` int NOT NULL AUTO_INCREMENT, `num` int NOT NULL DEFAULT '1', PRIMARY KEY (`id`), index (`num`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 上記のようなテーブルを作り、salesテーブルにCSVファイルからデータをインポートしたのち、FOREIGN KEYを子テーブルに追加したいのですが、下記のようなエラーになります。 ALTER TABLE `sales` ADD FOREIGN KEY ( `num` ) REFERENCES `test`.`goods` ( `num` ) ON UPDATE CASCADE ; MySQLのメッセージ: ドキュメント #1452 - Cannot add or update a child row: a foreign key constraint fails (`test`.`#sql-561_cf`, CONSTRAINT `#sql-561_cf_ibfk_1` FOREIGN KEY (`num`) REFERENCES `goods` (`num`) ON UPDATE CASCADE) データをインポートしたのちにFOREIGN KEYを追加するにはどのようにしたらいいのでしょうか?

  • #1062 - Duplicate entry '1' for key 'PRIMARY'

    利用していた幾つかのテーブルの中身だけを消去してしまいました。 ダンプデータを取ってあったので、復元させようとしたら、 下記エラーとなりました。何回か試している内、最終的にはうまくいったのですが、下記エラーは、どういう意味だったのでしょうか。 #1062 - Duplicate entry '1' for key 'PRIMARY' <補足> ・テーブル自体は消失していなかったので、データが消失したテーブル部分のみ、phpMyAdminのSQL欄にSQL文を書いて、テーブルごとにINSERT 文を実行した。 <知りたいこと> ・エラーの意味

    • ベストアンサー
    • MySQL
  • phpMyAdminでPRIMARY KEY AUTO_INCREMENT

    phpMyAdminの操作画面上でPRIMARY KEY AUTO_INCREMENTを設定する方法を教えてください。 SQLを使えばできるのですが、phpMyAdmin上ではAUTO_INCREMENTという項目が見当たりません。 かんたんな内容ですが、よろしくお願いします。

    • ベストアンサー
    • MySQL
  • PRIMARY KEYのコピー

    テーブルのコピーを create table test1 as select * from test ; のように行っていますが、PRIMARY KEYも一緒にコピーしたいのですが、 どうすれば良いのでしょうか?

    • ベストアンサー
    • MySQL