• ベストアンサー

予約語のgroup

groupは予約語のためカラム名には使えないはずですが、alter文だと作れてしまうのはmysqlのバグですか? ALTER TABLE `hoge` ADD `group` INT NOT NULL ;

  • MySQL
  • 回答数2
  • ありがとう数0

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

  • ベストアンサー
  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.2

 カラム名やテーブル名等の名前を「識別子」と言います。  さて、識別子の作り方にはルールがあるわけですが、MySQLにおけるルールは、次のURLのページに書かれています。(これは、5.1のものです。)  http://dev.mysql.com/doc/refman/5.1/ja/identifiers.html  さて、このページを読むと、「識別子に予約語を使用してはならない。」というルールはどこにも書かれていません。  そう。そんなルールは無いのです。  ただし、次のように書かれています。 >識別子が予約語、もしくは特殊文字を含む場合、 参照する時必ず引用符で囲まなければいけません。 >(例外:修飾名内で点の後に続く語は識別子であるため、予約語であっても引用符で囲む必要はあり >ません。)  つまり、文法に従うだけなら、引用符で囲みさえすれば、予約であっても斟酌なしに使っても良いということです。  従って、事例としてあげられたALTER文は、立派に合法的な文です。決して、MySQLがとちっているわけではありません。(ちなみに、CREATE TABLE文でも引用符で囲むことを忘れなければ、ちゃんと通ります。)  ですが・・・普通は、やめておくことをお勧めします。  特に、サードパーティーのツールで、このあたりの解釈が厳密に出来ていないものにぶつかるとトラブルの元になります。  

その他の回答 (1)

回答No.1

バッククオートで囲んでるんだから、予約語じゃないでしょ。

関連するQ&A

  • MySQL データベースを選択したい

    こんにちは。 SQLの初歩的な操作で躓いています。 MySQL 3.23.51-nt (WondowsXP) を使用しています。 PHPベースの掲示板を作成していまして、次の一連の作業をしたいのですが、 ALTER TABLE phpbb_categories ADD cat_main_type CHAR(1); ALTER TABLE phpbb_categories ADD cat_main MEDIUMINT(8) UNSIGNED DEFAULT '0' NOT NULL; ALTER TABLE phpbb_categories ADD cat_desc TEXT NOT NULL; ALTER TABLE phpbb_forums ADD forum_link VARCHAR(255); ALTER TABLE phpbb_forums ADD forum_link_internal TINYINT(1) NOT NULL; ALTER TABLE phpbb_forums ADD forum_link_hit_count TINYINT(1) NOT NULL; ALTER TABLE phpbb_forums ADD forum_link_hit BIGINT(20) UNSIGNED NOT NULL; ALTER TABLE phpbb_users ADD user_sub_forum TINYINT(1) DEFAULT '1' NOT NULL; ALTER TABLE phpbb_users ADD user_split_cat TINYINT(1) DEFAULT '1' NOT NULL; ALTER TABLE phpbb_users ADD user_last_topic_title TINYINT(1) DEFAULT '1' NOT NULL; ALTER TABLE phpbb_users ADD user_sub_level_links TINYINT(1) DEFAULT '2' NOT NULL; ALTER TABLE phpbb_users ADD user_display_viewonline TINYINT(1) DEFAULT '2' NOT NULL; 上記をを打ち込んでもError 1046: No Database Selected と言われます。 そこでどのようにしてデータベースを選択する事が出来るのでしょうか? よろしくお願いいたします。

  • 変数を組み入れたい

    MySQLのデータベースのテーブルに毎日1つのカラム(当日の名前のカラム)下記のようなPHPを作りました。 このPHPをクーロンで1日に1回踏むことにより、データベースの日付カラムを追記していくことを考えています。 下記のPHPだと、 ALTER TABLE `www_dairy` ADD `12-1` INT NOT NULL DEFAULT 0; という形で「12月1日」の固定値が追記されることになっています。 この固定値を「当日の変数としたい」というのが希望です。 print date("n-j"); で当日の日にちの変数は取得出来ます。 $today = date("n-j"); として変数を設定したまでは良いのですが、これを ALTER TABLE `www_dairy` ADD `12-1` INT NOT NULL DEFAULT 0; の12月1日の欄に変数として与える方法がわかりません。 ご教授いただきたくお願いいたします。 <?php $link = mysql_connect('localhost', 'root', 'password'); if (!$link) { die('接続失敗です。'.mysql_error()); } print('<p>接続に成功しました。</p>'); print date("n-j"); $db_selected = mysql_select_db('db_name', $link); if (!$db_selected){ die('データベース選択失敗です。'.mysql_error()); } print('<p>データベースを選択しました。</p>'); mysql_set_charset('utf8'); $today = date("n-j"); print('<p>データを追加します。</p>'); $sql = " ALTER TABLE `www_dairy` ADD `12-1` INT NOT NULL DEFAULT 0; "; $result_flag = mysql_query($sql); if (!$result_flag) { die('ADDクエリーが失敗しました1。'.mysql_error()); } $close_flag = mysql_close($link); if ($close_flag){ print('<p>切断に成功しました。</p>'); } ?>

    • ベストアンサー
    • PHP
  • PostgreSQLの「not null」制約の追加

    こんにちは。いつもお世話になります。 PostgreSQLのversion7.2.8で、「not null」制約の追加、削除の方法をおたずねします。よろしくお願いします。 ALTER TABLE テーブル名 ALTER COLUMN カラム名 SET NOT NULL; で試したところ、syntaxエラー(構文エラー)で失敗。 ALTER TABLE テーブル名 ALTER COLUMN カラム名 DROP NOT NULL; で試してみても、同じくsyntaxエラーです。 version7.2.8が原因でしょうか? また、version7.2.8でも「not null」制約の追加、削除が できる他の方法はありますでしょうか? テーブルを作り直さずに、 既存のテーブルのカラムへの制約の追加、削除をしようとしています。 よろしくお願いします。

  • NOT NULL 制約の削除

    MSSQL(SQLServer2000)にて、NOT NULLの列制約をはずすにはどうしたらよいのでしょうか。 ALTER TABLE <テーブル名> ALTER COLUMN <列名> DROP NOT NULL をやってみたのですが、構文エラーになってしまいます。 よろしくお願いします。

  • 連番の質問

    こんにちは 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になるように、どうすればいいのか、お願いできますか? お願いします。

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

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

  • 複数の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
  • PostgreSQLからMySQLへ変換

    現在ECサイトに追加カスタマイズ機能を導入したいと考えているのですが、 その際の使用コードが以下のようにPostgreSQLの記載となっており、 使用しているphpMyAdminにてSQLコードを入力するとエラーとなってしまいます。 ↓PostgreSQLコード CREATE TABLE dtb_bookmark ( bookmark_id serial NOT NULL, customer_id integer NOT NULL, product_id integer NOT NULL, memo text, create_date timestamp without time zone NOT NULL, update_date timestamp without time zone NOT NULL, del_flg integer ); ALTER TABLE ONLY dtb_bookmark ADD CONSTRAINT dtb_bookmark_pkey PRIMARY KEY (bookmark_id); COMMENT ON TABLE dtb_bookmark IS 'お気に入り情報'; エラーはtimestamp型とALTER以降の文で発生致します。 mysql文にて解釈させるにはどのように変更したらよろしいのでしょうか? 使用mysqlバージョンはMySQL 4.1.21です。 アドバイスなど頂けましたら幸いです。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • MySQL 予約語名で、カラム作成できるでしょうか

    ■質問 ・MySQL予約語名でもカラムを作成できるのでしょうか? ■背景 ・文法エラーSQL文の原因を調べると、どうやら予約語を利用したためだと分かりました ・予約語と知っていたら初めから利用しなかったのですが、その名前で普通にカラムを作成できたので、てっきり使えるものだと思い込んでしまいました ■知りたいこと ・予約語を回避するには、ここをチェックするしかないのでしょうか? ▽MySQL 5.1 リファレンスマニュアル :: 8.3 MySQLでの予約語の扱い   http://dev.mysql.com/doc/refman/5.1/ja/reserved-words.html ・予約語による影響を受けるのはどんな時?(CREATEは関係ない?) 予約語によって異なる?

    • ベストアンサー
    • MySQL
  • Mysqlに項目を追加するとき順番をかえるには

    こんにちは、 今mysqlを使用しています。 例えば、tbl_EXというテーブルがあり、 そこにはid,name,flgが入っているとしたときに addという項目を追加したい場合は ALTER TABLE tbl_EX ADD add int NULL DEFAULT 0 などとすれば追加できると思うのですが、 その追加を id, name, (add), flg というように 真ん中に入れたい場合は、どうすればいいのでしょうか? 一度テーブルをdropして作り替える以外に方法がある場合、 教えてください。

    • ベストアンサー
    • MySQL