none
ALTER TABLEで、NULL値の許可/禁止の変更構文について RRS feed

  • 質問

  • ALTER TABLEのALTER COLUMNで、NULL値の許可/禁止を変更する際の

    構文についてなのですが、

     

    CREATE TABLE TABLENAME (FIELD1 INT NOT NULL)

     

    上記の様なテーブルで、FIELD1フィールドのNULL禁止を許可に変更する際、

     

    ALTER TABLE TABLENAME ALTER FIELD1 INT NULL    -- A

     

    という構文になるかと思いますが、この際、フィールドの型(タイプ。ここでは

    INT)の指定って、何故、必要となる構文になっているんでしょうね。

    極端な構文ですが、

     

    ALTER TABLE TABLENAME ALTER FIELD1 VARCHAR(10) NULL

     

    とすると、NULL値許可だけでなく、フィールドの型までも変ってしまう(当然

    ですが)

     

    Aの構文は、NOT NULL -> NULL に変更する構文でなく、まず、

    INT -> INT に変更して、そのついでに NOT NULL -> NULL に変更しますよ、

    という構文に思えてしまうのですが。

     

    何故、NOT NULL / NULL を単独に(COLLATEもそうだと思うのですが)変更できる

    構文じゃないんでしょうね。

    と、ここで質問しても何がどうなるというものではないんですが、素朴に何故?

    って思ったので、質問させていただきました。

     

    最後まで読んで頂いてありがとうございます。

     

    2008年4月1日 13:53

回答

  • trapemiyaさん、回答ありがとうございます。

     

    >CREATEがALTERに変わっただけの構文なわけです

    構文解析の関係で、共通的にしている可能性ってありますね。

     

    >本当のところはわかりませんが

    はい。

    まったくもってその通りですね(笑

     

    お付き合いありがとうございました。

     

    2008年4月7日 2:06

すべての返信

  • 全くの想像ですが、CREATE TABLEの時と同じように、単に全て指定しているだけなんじゃないでしょうか?

    CREATE TABLEの時に、単にFIELD1 NULLでは成り立たないですよね。言い方を代えれば、CREATEがALTERに変わっただけの構文なわけです。カラムをごそっと入れ替えるイメージになっていると思うのです。

     

    NULLやUNIQUEなどの属性が不定数で続く場合がありますから、ごそっと入れ替えた方がわかりやすい気がします。そこだけ見ればそのカラムの属性がどうなっているのか完全にわかります。

    一方、FIELD1 NULLとだけ書いてあると、その前も合わせて見なければなりません。例えばUNIQUE属性はどうだったかな?って前の命令を見なければならなくなります。

     

    本当のところはわかりませんが・・・

    2008年4月1日 17:04
  • trapemiyaさん、回答ありがとうございます。

     

    >CREATEがALTERに変わっただけの構文なわけです

    構文解析の関係で、共通的にしている可能性ってありますね。

     

    >本当のところはわかりませんが

    はい。

    まったくもってその通りですね(笑

     

    お付き合いありがとうございました。

     

    2008年4月7日 2:06