web-dev-qa-db-ja.com

MySQLの列から「NOTNULL」を削除するにはどうすればよいですか?

Show create tableコマンドは、次のことを示しています。

'columnA' varchar(6) NOT NULL DEFAULT '';

Null以外が削除されるように、その列を変更するにはどうすればよいですか?私はそれが必要です:

'columnA' varchar(6) DEFAULT NULL;

以下はうまくいくと思いましたが、効果はありません。

ALTER TABLE tbl_name MODIFY columnA varchar(6) DEFAULT NULL;
18
Will

代わりにこれを試してください:

ALTER TABLE tbl_name MODIFY columnA varchar(6) NULL DEFAULT NULL; 
24
Eric Petroelje

通常、エリックの答えはうまくいくはずです:

ALTER TABLE tbl_name MODIFY columnA varchar(6) NULL DEFAULT NULL; 

(ただし、「NULL DEFAULTNULL」の部分はオプションです)。

しかし、あなたと同じように、何もせずにOKに戻っただけのケースがありました。私の場合、私のキーが主キーの一部であったことが原因のようです。だから私は次のことをしなければなりませんでした:

ALTER TABLE tbl_name DROP PRIMARY KEY;
ALTER TABLE tbl_name MODIFY columnA varchar(6);
ALTER TABLE tbl_name ADD PRIMARY KEY (columnA);

その最後のクエリで、主キーが実際に何であるかを指定します。

また、冗長すぎると思われる場合は、次の組み合わせクエリは同じである必要がありますが、機能しません。

ALTER TABLE tbl_name DROP PRIMARY KEY, MODIFY columnA varchar(6), ADD PRIMARY KEY (columnA);

Mysqlは最後のクエリを別の順序に書き換えて、変更が実行されたときに主キーがまだ存在するようにするため、3つのステートメントに分割する必要があると思います。

参考までに、これはmysql 5.1.47にありますが、これが発生する理由を示すドキュメントがまだ見つからないため、影響を受けるバージョンがわかりません。

5
Rob Van Dam

PhpMyAdminで(ローカルに)変更を加えます。変更に使用したクエリが表示されます。このクエリを本番環境で実行すれば完了です。

この戦略を任意のGUIツールで使用して、実行するクエリを確認できます。私は個人的にphpMyAdminの代わりに Sequel Pro(Mac OS X用) を使用しています。

2
Bob Fanger