MySQL(4.0)を触り始めて1ヶ月少々の者ですが、フィールド数について質問です

このQ&Aのポイント
  • コマンドプロンプトからテーブルを作成する際、ある一定のフィールド数を超えると記述ができなくなることがあります。現在、40弱のフィールドを持ったテーブルを設置していますが、フィールドの追加には「alter table」を使用しています。この現象には何らかの障害があるのでしょうか?
  • フィールドの追加には問題がないようですが、なぜかテーブル作成時に一定数のフィールドを超えるとエラーが発生します。MySQL(4.0)を使っていますが、この制限について詳しく教えていただけないでしょうか?
  • MySQL(4.0)を使用している際、一定数のフィールドを超えるとテーブル作成時に記述ができなくなります。現在、40個のフィールドを持ったテーブルを作成していますが、この現象には何か特別な理由があるのでしょうか?
回答を見る
  • ベストアンサー

フィールド数について

いつもお世話になっております。 MySQL(4.0)を触り始めて1ヶ月少々の者ですが、本や皆様のご意見をもとに学ばせて頂いております。 と、ここでフィールド数に関して質問なのですが、コマンドプロンプトから「create table test(id int...)」と記述していくと、ある一定のところでこれ以上記述できなくなってしまう事があります。 現在、多いもので40弱程のフィールドを持ったテーブルを設置しておりますが、いつもフィールドの追加として、「alter table test add...」と対処している次第です。 これって何処か障害があるのでしょうか? フィールドの追加で事なきを得ているのですが、どうも不可解なもので・・・ご指導のほど宜しくお願い致します。

  • MySQL
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

たぶん、コマンドプロンプトの入力制限でしょう。 コマンドプロンプト上で入力できる文字数が制限されています。(メモリ管理の関係かな?よくは知りませんが) 一行で入力しようとすると、文字があふれてしまうので、 途中で改行を入れれば大丈夫です。 構文が合っていれば改行を入れても通ります。

sadacha
質問者

お礼

moon_nightさま 回答を有難う御座います。 つい先日、フィールド数を増やしたのですが、それからDBへ登録出来なくなった…という事があり、「もしや原因は強制的にフィールド数を設置いるからかな?」などと、初心者ならでは?の、見えない不安がありました。 時間の関係で今、確認することは出来ませんが、追っ手報告をいたしたいと思います。 取り急ぎご挨拶までに・・・ 有難う御座いました。

sadacha
質問者

補足

moon_nightさま こんばんは。報告が遅くなり申し訳ありません。 仰られたように、文字数の制限のようですね。 改行を加えることで回避できました。 初歩的な事なのかもしれませんが、これでまた1つ疑問が解決出来た思いです。 有難う御座いました。

関連するQ&A

  • フィールド名に日付を入れたい

    いつも回答ありがとうございます。 MySQL&PHPを利用しております。 下記のように書いたのですが、フィールド追加できません。 $today = date("ymd"); $sql = "ALTER TABLE book1 ADD $today TEXT NOT NULL"; $query = mysql_query($sql, $link); $todayの所を、 $today = "d" . date("ymd"); のように文字を先頭に置くなどするとフィールドを追加できました。 日付はフィールド名として指定できないのでしょうか? CRONで毎日、日付のフィールドを追加して、データの変化を見ていきたいと考えています。 わかる方お願いします。

    • ベストアンサー
    • MySQL
  • 連番の質問

    こんにちは MYSQLの勉強始めたばかりなのですけど、よろしくお願いします。 このように連番を作ったのですが、 alter table xxx add renban int; alter table xxx add index index1(renban); alter table xxx modify renban int auto_increment; 順調にできたのですが、#9と#10の二つのフィールドを消去したところで、次の番号が9からではなく、 11からになってしまったのです。 そこで、index1の消去して、新しい連番を作るのに、どうすればいいのか、教えてください。 それとも、次の番号が11ではなく、9になるように、どうすればいいのか、お願いできますか? お願いします。

  • SQLでフィールドの順番を変更したい

    お世話になっております。 ORACLEを使用しております。 既存のテーブルに新しいフィールドをSQL文にて ALTER TABLE TEST_MST ADD TEST_CD VARCHAR2(2); と言う風に、SQL*PLUSにて追加いたしました。 これを参照しますと、 追加したフィールドがテーブルの一番最後のフィールドに 追加されているのですが、 フィールドの順番を変更したいと考えております。 SQL文にて何か方法はございませんでしょうか。 ご返答を宜しくお願い致します。

  • MYSQLのフィールドにユニークキーを設定する。

    すでに作ってしまったテーブルにユニークキーを付けたいと考えています。最悪の場合、新しくカラムを作っての追加でもかまわないのですが、いろいろ試してもエラーが返されてしまいます。 codeというカラムにユニークキーを設定したいのですが、 alter table テーブル名 modify unique code; alter table テーブル名 add unique code2; alter table テーブル名 modify code unique; alter table テーブル名 add code2 unique; alter table テーブル名 modify code test unique; alter table テーブル名 add code2 test unique; alter table テーブル名 modify unique code test; alter table テーブル名 add unique code2 test; alter table テーブル名 modify (code unique); alter table テーブル名 add (code2 unique); alter table テーブル名 modify (code text unique); alter table テーブル名 add (code2 text unique); など、思いつく限り試し、グーグルで調べる限り調べたのですが、出てきたものをためしてもダメでした。 テーブルを作成した後、カラムにユニークキーを設定した経験のある方、どのように変更をしたのでしょうか?

    • ベストアンサー
    • MySQL
  • 複数のindexについて

    CREATE TABLE `test` ( `id` INT(8) , `num` INT(8) , 他多数 (省略) ) このようなテーブルがある場合、以下の2種類のインデックスのつけ方にどのような違いがあるのでしょうか? phpmyadminで確認すると、(1)はインデックスが合体しており、(2)はインデックスが個別に分かれています。 (1) ALTER TABLE `test` ADD INDEX ( `id` , `num` ) (2) ALTER TABLE `test` ADD INDEX ( `id` )   ALTER TABLE `test` ADD INDEX ( `num` ) ちなみに、以下のようなSELECT文を用いる場合には、どちらのインデックスが適していますか? SELECT * FROM test WHERE id='●' and num > '△' ( mysql5,MyISAM )

    • ベストアンサー
    • MySQL
  • SQLServer:SQL文でシングルクオテーションを混在させたフィールドを追加したい

    SQLServer2000を使用しております。 タイトルのとおりなのですが、 SQL文でシングルクオテーションを混在させたフィールドを追加するにはどのように記述すればよいのでしょうか。 レコードに混在させるには2つシングルクオテーションを記述すればよいというのはわかったのですが、 ALTER TABLE 等でフィールドを追加するときは、 この記述では追加が行われませんでした。 どなたかご教授の程、宜しくお願い致します。

  • テーブルのフィールドにNot null制約を付けたい

    お世話になります。 既存テーブルにフィールドを追加する方法は わかっているのですが、その追加したフィールドに not null制約を付けるにはどのようなコマンドを 実行する必要があるのでしょうか。 ↓のコマンドには制約をつけるオプションはないですよね。。 ALTER TABLE テーブル名 ADD (カラム名 カラム定義) よろしくお願いします。

  • 位置を指定してフィールドを追加する

    位置を指定して、フィールドを追加する方法をがわかりません。 ALTER TABLE [既存のテーブル名] ADD [新しいフィールド名] VARCHAR(100) AFTER [既存のフィールド名]; 上記のような方法でできませんでした。 ちなみにSQLServer2000がインストールされた環境で、クエリアナライザで実行しました。 よろしくお願いいたします。

  • SQL Server(MSDE2000) : ALTER TABLE

    SQL Server(MSDE2000) : ALTER TABLE した項目に対し、直後に UPDATE で値をセットできない 既存のテーブルを仕様変更するため、列を追加し、初期値で埋める SQL 文を書こうとしていますが、うまく動かず、エラーとなってしまい、原因が判らず困っています。 サンプル SQL 文: ------ CREATE TABLE TEST_TABLE ( TEST_FIELD1 SMALLINT, TEST_FIELD2 SMALLINT) INSERT INTO TEST_TABLE VALUES( 1, 2 ) ALTER TABLE TEST_TABLE ADD TEST_FIELD3 SMALLINT UPDATE TEST_TABLE SET TEST_FIELD3 = 3 ------ ※テスト毎に、必ず DROP TABLE TEST_TABLE されている事が前提です。 上記 SQL 文のうち、1行目~3行目までを抜粋して実行すると、ちゃんと CREATE TABLE され、INSERT され、ALTER TABLE される事を確認しました。 ところが、4行目までを一気に実行しようとすると、 ------ SQL実行中に以下のエラーが発生しました。 エラーコード:207 [Microsoft][ODBC SQL Server Driver][SQL Server]列名 'TEST_FIELD3' は無効です。 SQLステータス:S0022 ------ となってしまい、UPDATE で初期値を埋める事ができません。 しかも、UPDATE に失敗するどころか、2行目の INSERT から以降が結果に反映されなくなるという状況に陥ってしまいます。 また、既存のテーブルの仕様変更が目的なので、その状況に近づけるために、まず、 ------ CREATE TABLE TEST_TABLE ( TEST_FIELD1 SMALLINT, TEST_FIELD2 SMALLINT) INSERT INTO TEST_TABLE VALUES( 1, 2 ) ------ を実行し、既存のテーブル(とレコード内容)が存在する状態を作り出された事を、ツール等で確認してから、 ------ ALTER TABLE TEST_TABLE ADD TEST_FIELD3 SMALLINT UPDATE TEST_TABLE SET TEST_FIELD3 = 3 ------ の2行を実行してみると、やはり UPDATE は失敗し、前述と同じエラーが発生します。 またこの場合、ALTER TABLE の実行結果も反映されていません。(つまり、TEST_FIELD3 が列追加されていない) もちろん、ALTER TABLE だけを実行した場合には、ちゃんと列は追加されます。 その後に、UPDATE を実行すれば、ちゃんと追加列に初期値がセットされます。 どうやら、「一回の SQL 文の実行の中で、ALTER TABLE によって新設した列に対しては、UPDATE などでのアクセスはすぐにはできない」のではないか?という状況のようなのです。一回の SQL 文の実行の中において、何らかのトランザクション動作っぽい挙動を感じます。 つまり、ALTER TABLE で追加された列は、その時点ではまだ完全にシステムに認知されていないため、直後の UPDATE 文で認識できずに失敗するのではないか?と。そして、そこでのエラー発生が、ロールバック的に実行した処理をキャンセルしてしまうため、結果として、ALTER TABLE が実行されなかった事になったり、INSERT が実行されなかった事になったりしているのではないか?と思う次第です。 考えられる回避策としては、SQL 文を別々に作成し、個別に実行すれば良いだけの事なのですが、できれば、SQL 文一つにまとめたいと考えています。 どなたか、こういった現象に対する原因・理由の説明、或いは回避策など、何か情報をお持ちの方はいらっしゃいませんでしょうか? 宜しくお願いします。

  • MySQLで、テーブル内のフィールドの名前を変えたいのですが・・・

    MySQL4.0.20 Linuxを使っています。 テーブル内のフィールドの名前を変えたいのですが、alter table の modifyはカラムの属性を変えるもので、名前を変えるのは運用途中でできるのかなと、ふと疑問に思いました。 alter tableなどでできるのでしょうか? 結局サーバーを止めて、バックアップし、テーブル定義を書き直して、リストアするしか無いのでしょうか?

    • ベストアンサー
    • MySQL