テーブル作成でカラム名で配列を

このQ&Aのポイント
  • MySQLを勉強している初心者です、よろしくお願いします。テーブル作成時、カラム名を配列を使ってできないものでしょうか?(data1 data2 data3 data4 とするのが面倒なのですが)ERROR 1064:You have an error in your SQL syntax.となります。また二次元配列はどのようにしたらよいのでしょうか?
  • MySQL初心者がテーブル作成でカラム名に配列を使用する方法について教えてください。カラム名を配列を使って簡潔に記述する方法はありますか?また、テーブル作成時のエラー「ERROR 1064:You have an error in your SQL syntax.」が発生します。さらに、二次元配列を作成する方法も教えてください。
  • 初心者のMySQL学習者です。テーブル作成時にカラム名を配列を使って簡単に記述する方法はありますか?現在、カラム名を個別に列挙する方法に苦労しています。また、テーブル作成時にエラー「ERROR 1064:You have an error in your SQL syntax.」が発生する問題も発生しています。さらに、二次元配列を作成する方法も教えてください。よろしくお願いします。
回答を見る
  • ベストアンサー

テーブル作成でカラム名で配列を

MySQLを勉強している初心者です、よろしくお願いします。 テーブル作成時、カラム名を配列を使ってできないものでしょうか? (data1 data2 data3 data4 とするのが面倒なのですが) CREATE TABLE table_name ( code int(6) , data1[100] int(10) , data2[50] varchar(20) , data3[20] varchar(25)); ERROR 1064:You have an error in your SQL syntax. となります。 また二次元配列はどのようにしたらよいのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jxt
  • ベストアンサー率48% (42/86)
回答No.1

テーブルに配列を、というのは非常に非効率的な考えです。 たとえば電話番号をデータベースに登録するとして、 一人の人間が何個の電話番号を持つかと考えれば、 固定電話、FAX、携帯電話1,携帯電話2・・・ と増える場合もありますし、携帯電話1しか持たない人も いるわけです。 そんなときにあらかじめフィールド数が決まっていると、 多いときには入りきらないし、少ないときは残りを NULLで埋める必要がでてきます。また、取り出す アプリケーション側で値がNULLの時の処理を するひつようが出てきます。 通常このように配列のようなデータが必要になる場合は テーブルを2つに分離させ、「正規化」というものを 行います。 たとえば次のようにします create table member( member_id int(11) primary key not null auto_increment, first_name varchar(64), last_name varchar(64)); create table member_phone_number( member_phone_id int(11) primary key not null auto_increment, member_id int(11) not null, phone_number varchar(13)); こうして select mp.phone_number, p.first_name, p.last_name from member p, member_phone_number mp where p.member_id = mp.member_id; とすると、名前と電話番号がずらっと出てきます。 「名前を配列に」するのは、理由がわからないので思いつきません。 配列よりもわかりやすい名前を付けた方が後で便利だと思うのですが、 いかがでしょう。 自分は多少長くても誰が見てもわかるフィールド名をつけるようにしています。

rakujin
質問者

お礼

アドバイスありがとうございます。 初心者ですので、データベースを構築するにあたってのノウハウがありません。 大変勉強になりました。正規化がどんなものなのかも勉強してみたいと思います。 データベースは出来るだけ細分化し、小さくするのがコツのようですね。 結論的には、配列は使えない、もしくは使う合理性が無いということでしょうか。 フィールドも多少長くても、識別しやすい名前にすべきなんですね。

関連するQ&A

  • 初歩的ですが、どうしてかテーブルが作成できないで困っています。

    こんにちは。 MySQLを使い始めたのですが、 テーブルを作成するという初歩的な部分で、 どうしても自分では分からなくなってしまい 質問させていただきます。 create databaseを行った後、 普通にテーブルを作成しようとしただけではあります。 作成しようとしたテーブルは、 keyというカラムとvalueというカラムの 計2つからなるテーブルです。 しかし、 カラム名の1つを「key」ではなく「time_to_get_the_key」で行うと、 正常にテーブルが作成されるのに、 mysql> CREATE TABLE 20090413_put1(time_to_get_the_key VARCHAR(100), value VARCHAR(100)); Query OK, 0 rows affected (0.01 sec) 同じカラム名を「key」でテーブル作成しようとすると、作成ができないでいます。 mysql> CREATE TABLE 20090413_put1(key VARCHAR(100), value VARCHAR(100)); 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 'VARCHAR(100), value VARCHAR(100))' at line 1 本来は、 「key」と「value」というカラムで、 それぞれ100文字以内で収まる文字列を カラムに挿入させるつもりでした。 何か御意見いただけるとありがたいです。 宜しくお願い致します。

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

    CREATE TABLE media ( id INT DEFAULT 0 primary key, media_name VARCHAR DEFAULT '', others text DEFAULT '', regis_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, update_date TIMESTAMP ); をMySQL 5.0.77で実行したところ 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 ' regis_date TIMESTAMP, update_date )' at line 3 のエラーが出てきてしまいます しかしMySQLを使い始めたばかりで今一理解が出来ず また、 text DEFAULT '' を使った他のテーブルは作成できています どこがおかしいのか教えていただけませんでしょうか、お願いします

    • ベストアンサー
    • 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
  • テーブル作成時のエラーについて(Mysql 5.1.30)

    SQLを勉強始めたばかりの超初心者です。 先日勉強のため、Mysql ver.5.1.30をDLしてインストールしました。 名簿テーブルを作成しようとMySQL Command Line Clientから以下のコマンドを入力しました。 mysql> create table 名簿( -> 姓 varchar(12), -> 名 varchar(12), -> 生年月日 date); 実行すると以下のエラーが表示されます。 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 '名簿( 姓 varchar(12), 名 varchar(12), 生年月日 date)' at line 1 これは何が間違っているのでしょうか? テキストどおりに入力しているのですが、テーブルが作成できないため次に進めません。 周りに詳しいものもいないため困っています。 ぜひご教授よろしくお願いします。

    • ベストアンサー
    • 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
  • 複数のカラムを対象にしたプライマリキー制約の設定

    テーブル作成後に複数のカラムを対象にしたプライマリーキー制約を設定することはできるのでしょうか。 テーブル作成時であれば、次の方法により設定することができます。 ※col_name1及びcol_name2に設定したい場合 CREATE TABLE tbl_name (col_name1 int NOT NULL, col_name2 int, col_name3 varchar(255), PRIMARY KEY(col_name1, col_name2)); しかし、一旦テーブルを作成した後に、プライマリーキー制約を設定し忘れたことに気が付き、設定したい場合は、いかなる方法によりできるのでしょうか。 次の方法にて試みたものの、エラーが生じました。 【SQL文】 ALTER TABLE tbl_name MODIFY col_name1 int, col_name2 int, PRIMARY KEY(col_name1, col_name2); 【エラー内容】 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 'col_name2 int, PRIMARY KEY(col_name1, col_name2)' at line 1 テーブルを削除し、再作成時にプライマリーキー制約を設定する方法によっても対応できますが、削除しなくてもこれを行える方法があるのか否かを知りたく、質問させていただきました。

    • ベストアンサー
    • MySQL
  • SQL文のエラー原因がわかりません・・。

    これの何処が間違っているのでしょうか? 本のコードをそのまま手打ちしてるだけなんですが・・・。 何処かにエラーがあるんでしょうか?? CREATE TABLE aliens_abduction ( last_name varchar(30) , first_name varchar(30) , when varchar(30) , howlong varchar(30) , howmany varchar(30) , who varchar(100) , how varchar(100) , see varchar(10) , other varchar(100) , email varchar(50) ); エラー内容↓ #1064 - 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 'when varchar(30) , howlong varchar(30) , howmany varchar(30) , who varchar(100) ' at line 4

    • ベストアンサー
    • MySQL
  • ダイレクトインサートでテーブル作成時カラム長を指定

    oracle10g standard 下記のようなsqlでviewをtable化するとvarchar2のカラム長が固定で4000になります。 長さを指定することはできますか? create table test as select * from view;

  • SQL文(テーブル作成)に関する質問です

    SQL文についての質問です。仕様にあわせたテーブルを作ろうとしていますが、何故... SQL文についての質問です。 仕様にあわせたテーブルを作ろうとしていますが、何故かエラーが出ます。 どのように書けばいいんでしょうか? どなたか教えて下さい。 以下がSQL文です。 mysql> CREATE TABLE Syain -> ( user_id char(10) NOT NULL ← ユーザーID:半角英数字記号文字 10桁(固定) 自動発番 -> username varchar(250) ←ユーザー名:最大250文字まで登録可能 -> user_Yomi varchar(250) ←読み仮名:最大250文字まで登録可能 -> email varchar(250) NOT NULL ←e-mail:250文字まで登録可能 @必須 -> renrak varchar(250) ←連絡先:250文字まで登録可能 -> Yubin varchar(8) NOT NULL ←郵便番号:必須 8桁 -> Adress varchar(10) ←住所:500文字(半角換算)真で登録可能。 -> PRIMARY KEY(user_id)); ←このuser_idはプライマリキーになる。 また、以下がエラーです。 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 'usern ame varchar(250) user_Yomi varchar(250) email varchar(250) NOTNULL renrak v' at line 3 よろしくお願いします。

  • SQLエラーの意味を教えてください

    自PCで開発しています。 テーブルを作成できたようなのですが、SQLを走らせようと思うとエラーがでてしまいます。 #1064 - 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 ')' at line 8 CREATE TABLE linkbook_juku( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT , juku VARCHAR( 255 ) NOT NULL , address VARCHAR( 255 ) NOT NULL , description TEXT, pwd INT( 2 ) , MODIFY DATE NOT NULL , ); このSQLでなにが間違っているか見当がつきません。 ご存知の方いたらご教授頂けたら幸いです。 よろしくお願いします。

    • ベストアンサー
    • MySQL