• 締切済み
  • 困ってます

MySQLでCREATE TABLE

MySQLでCREATE TABLEをする際に、 プライマリキーを設定する場合は、 CREATE TABLE( AAA CHAR(5) NOT NULL, BBB CHAR(5) NOT NULL, CCC VARCHAR(10) NOT NULL, PRIMARY KEY(AAA) ); のようにすると思うのですが、「BBB」を外部キーにしたい場合は、どうしたらいいのでしょうか?

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数136
  • ありがとう数1

みんなの回答

  • 回答No.1

test1テーブルにAAA(主キー),BBB,CCC列、 test2テーブルにxxx(主キー),yyy,zzz列があると仮定します。 普通にselect文で select xxx, CCC, yyy, zzz from test1,test2 where test2.xxx = test1.BBB ; と問い合わせればリレーション機能が実行されビューに表示されます。 内部結合も外部結合もSQLのデータ操作文(DML文)を使えばいいだけです。 違うテーブルに同じ列名がある場合は、列名の前にテーブル名.が必要です。 同じ列名がない場合は付けても付けなくても構いません。 また、なにか意図があって主キーを2つ設定したいのであれば、 PRIMARY KEY(AAA) の部分を PRIMARY KEY(AAA,BBB) にしてみてはいかがでしょうか? 検索スピードを考えているのであればインデックスを付加するとか。 意味が違っていたらすみません。 ちなみにCREATE TABLEはSQLのデータ定義文(DDL文)です。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご回答ありがとうございます。 Oracleなどでは、外部キーをFOREIGN KEY句で登録するので、MySQLでもあるのかと思ったのですが、どうやらMySQLには外部キーは存在しないようです。 ありがとうございました

関連するQ&A

  • MySQLでのテーブル作成について

    はじめまして。私は学校でDBの勉強をするのにOracle10gを使っているのですが家で練習するにあたりOracleを入れれないのでMySQL5.0をいれてみましたが若干勝手が違いいろいろ調べながらやってみたもののテーブル作成の際の制約の決め方などがうまく作れません。特に外部キーで悩んでいるのですがどうすればよいか教えていただきたいのです。 mysql>CREATE TABLE MEIBO( SEITO_NBR INT(5) PRIMARY KEY NOT NULL, SEITO_MEI VARCHAR(80) NOT NULL, SEIBETSU_KBN CHAR(1), TANJO_YMD DATE, GAKKA_CD VARCHAR(2), BIKOU_TXT VARCHAR(1000), INSERT_DATE DATE, UPDATE_DATE ); mysql>CREATE TABLE GAKKA( GAKKA_CD VARCHAR(2) PRIMARY KEY NOT NULL, GAKKA_MEI VARCHAR(80) NOT NULL ); ちなみに下の学科表は作成できました。が上の名簿がうまくできません。長くなりましたがよろしくお願いします。

  • MySQLでのテーブル作成

    MySQLでこういったテーブルを作成したのですが、 CREATE TABLE NOSGI ( GNRE_CD CHAR(5) NOT NULL, GNRE_NAME VARCHAR(20) NOT NULL, PRIMARY KEY (GNRE_CD) ); GNRE_CDはCHAR型で作成したのに、カラムの情報を見ると、 VARCHAR型にしまうのですが、どうしてでしょうか?

  • 漢字名のテーブルとカラムのCREATE TABLEについて

    Oracle9iで以下のCREATE文を実行しようと思っています。 漢字名のテーブルで、漢字名のカラムのあるCREATE文です。 SQL> CREATE TABLE "TAB_あいう"( 2 "かきコード" varchar2(5) NOT NULL , 3 "くけ開始月" varchar2(2) NOT NULL , 4 "フラグ" char(1) NOT NULL , 5 "さCD" char(6) NOT NULL , 6 "日時" date NOT NULL , 7 canstraint PK_FISCALTERM primary key ("かきコード")); canstraint PK_FISCALTERM primary key ("かきコード"))                            * 行7でエラーが発生しました。: ORA-00907: 右カッコがありません。 しかし、 ORA=00907;右カッコがありません。といわれてしまいます。 見た目、右かっこはあります。 なにか、お作法的なものがあるのでしょうか?

  • TABLE名に使えない文字列をエスケープするには?

    aaa.bbbのように、TABLE名に.(ドット)を使いたいのですが、このままだとエラーが発生してしまいます。 mysql> CREATE TABLE aaa.bbb ( id MEDIUMINT NOT NULL AUTO_INCREMENT, abc varchar(16), xyz varchar(16), PRIMARY KEY (id) ); ERROR 1049 (42000): Unknown database 'aaa' .(ドット)をエスケープするにはどうすればよいでしょうか? ちなみに\(バックスラッシュ)を.(ドット)に前置してもエラーになってしまいます。

    • ベストアンサー
    • MySQL
  • MySQLの外部キーの設定について

    はじめまして。 質問があります。 MySQLを使用しているのですが、以下を見てください。 ---------------------------------------------------------------- mysql> create table vendors -> ( -> vend_id char(10) NOT NULL, -> vend_name char(50) NOT NULL, -> vend_zip char(10), -> vend_state char(10), -> vend_city char(50), -> vend_address char(50), -> primary key(vend_id) -> ) TYPE=MyISAM; Query OK, 0 rows affected (0.38 sec) mysql> create table products -> ( -> prod_id char(10) NOT NULL, -> vend_id char(10) NOT NULL, -> prod_name char(255) NOT NULL, -> prod_price decimal(8,0) NOT NULL, -> prod_desc blob, -> primary key(prod_id), -> foreign key(vend_id) references vendors(vend_id) -> ) TYPE=MyISAM; Query OK, 0 rows affected (0.05 sec) ---------------------------------------------------------------- 外部キーを設定したつもりなのですが、desc productsを実行すると キーフィールドに「pri」と表示されているので、主キーが 設定されていることが確認できるのですが、外部キーが設定されて いることは確認できません。外部キーは設定されているのでしょうか? もし設定されていないのなら、どのようにすればよいのでしょうか? また、外部キーが設定されていることを確認するにはどうすれば よいでしょうか?ご教授お願いします。

    • ベストアンサー
    • MySQL
  • MySQLで特定のテーブルが作成できない

    MySQLにログインしcategoryというテーブルを作成しようと思っているのですが作成できません。 [列名],[データ型]は key, 整数型、プライマリキーとする category, 可変長文字型、最大100文字 keyword, 可変長文字型、最大200文字 というものを作りたいので、 create table category( key int not null, category varchar(100), keyword varchar(200), primary key(key) ); で作成したのですが、 ERROR 1064: You have an error in your SQL syntax near 'int not null, category varchar(100), keyword varchar(200), primary key(key) )' at line 2 とエラーが表示されてしまいます。 エラーから推測するにkeyが悪いということだと思うのですが、何が問題なのか理由が分かりません。 一体何が原因なのでしょうか? MySQLのバージョンはVer 11.18 Distrib 3.23.57です。

    • ベストアンサー
    • MySQL
  • エラーになってしまうCREATE文

    MySQL 5.0.21(Win版)を導入してみたのですが、 http://hotwired.goo.ne.jp/webmonkey/2000/01/index2a_page5.html にある下記のSQL文を「MySQL Command Line Client」から実行すると CREATE TABLE employees ( id tinyint(4) DEFAULT '0' NOT NULL AUTO_INCREMENT, first varchar(20), last varchar(20), address varchar(255), position varchar(50), PRIMARY KEY (id), UNIQUE id (id)); を実行すると、 mysql> CREATE TABLE employees ( id tinyint(4) DEFAULT '0' NOT NULL AUTO_INCREMEN T, first varchar(20), last varchar(20), address varchar(255), position varchar(5 0), PRIMARY KEY (id), UNIQUE id (id)); ERROR 1067 (42000): Invalid default value for 'id' mysql> とエラーになってしまいます。なぜでしょうか?

    • ベストアンサー
    • MySQL
  • SQLでTableが作れないlol

    show databases; と入力 自分のデータベースを use me; と入力 show tables;  と入力してからが問題なのですが・・・。 テーブルを作りたいのに、CREATEをしても作れないんですorz ↓↓入力した内容は以下のとおりです↓↓ CREATE TABLE cake ( code char(3), name varchar(10) NOT NULL, tanka char(8), from varchar(20) NOT NULL , drink varchar(10) NOT NULL , PRIMARY KEY (code) ); と、入力するとエラーで・・・ ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from varchar(20) NOT NULL, drink varchar(10) NOT NULL, PRIMARY KEY (code) )' at line 5 と出てくるのですが、よくわかりません。 昨日までは作れていたのになぜかわからず質問してみました。 code char(3) , を code int(3), としてもできませんでした。 これから作業で使うので、困ってます><! ご回答のほどよろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • MySQLで項目の反復定義(COBOLでいうところのOCCURS)はあ

    MySQLで項目の反復定義(COBOLでいうところのOCCURS)はありますか? 今は AAA1 varchar(10) not null BBB1 int(6) not null CCC1 int(2) not null AAA2 varchar(10) not null BBB2 int(6) not null CCC2 int(2) not null  :  : AAA30 varchar(10) not null BBB30 int(6) not null CCC30 int(2) not null みたいに書いています。 XXX OCCURS 30 AAA varchar(10) not null BBB int(6) not null CCC int(2) not null のような書き方があればと思ったのですが。。 ご存知の方いらっしゃいましたら、 また他に良い方法をご存知の方いらっしゃいましたら ご教示願います。 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • Oracleでテーブルを作成する際に、インデクスの作成先を指定したい。

    以下のようにテーブルを作成しようとしてます。 CREATE TABLE TEST_USER.M_USER ( ID char(4), NAME varchar2(40) NOT NULL), CONSTRAINT PK_USER PRIMARY KEY(ID) ); さて、プライマリキーを定義しているので、インデクスが作成されるはずです。 この作成先のテーブルスペースを指定したいのですが、方法が解りません。 CREATE TABLEの紹介をしているサイトにものっていなくて、途方にくれています・・・。 CONSTRAINT句を使えばいいのでしょうか?