-1

The definitive guide to django を読んでいて、列が null 値を持つことができることを mySQL に伝えなければならない行があります。

本はこれを使っている

ALTER TABLE books_book ALTER COLUMN publication_date DROP NOT NULL;

しかし、実行すると、次のメッセージが表示されます。

エラー 1064 (42000): SQL 構文にエラーがあります。1行目の「NOT NULL」付近で使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください

どうしたの ?私は初心者なので、mySQL エラーを簡単に診断できません。

4

4 に答える 4

1

はい、この構文は間違っています。

列に null 値が含まれることがあることのみを許可する場合は、それが既に既定の動作になっています。

テーブル定義がnullを禁止しているかどうかを確認してください

show create table

デフォルトの動作がない場合は、UNIQUE および/または NOT NULL 制約が表示されます。

于 2012-10-13T13:40:11.433 に答える
1

DROP列名、インデックス名、および制約名でのみ使用できますが、データの条件では使用できません。私はNOT NULL名前付きの制約だとは思わないので、エラーです。

ALTER COLUMNを使用して列の NOT NULL 定義をドロップすることはできませんが、 DROP DEFAULT.

:

ALTER TABLE books_book ALTER COLUMN publication_date DROP DEFAULT;  
ALTER TABLE books_book ALTER COLUMN publication_date SET DEFAULT TODAY();  

NOT NULL列の定義を削除する場合は、MODIFYまたはのCHANGE構文を で使用する必要がありますALTER TABLE

:

ALTER TABLE books_book MODIFY COLUMN publication_date DATE NULL;  
ALTER TABLE books_book CHANGE COLUMN publication_date new_name DATE NULL;  

参照: ALTER TABLE 構文

于 2012-10-13T13:51:23.690 に答える
0

最も最小限の正しい構文は次のとおりです。

ALTER TABLE books_book ALTER COLUMN publication_date column_type NULL;

column_type を現在のタイプの publication_date に置き換えます。その列に他の指定子がある場合は、それらも追加する必要があります。名前が示すように、それが日付であるとします。

ALTER TABLE books_book ALTER COLUMN publication_date DATE NULL;

mysqldump を使用して列を再作成する方法、またはテーブルをエクスポートすることによって (または @mbarthelemy が提案したようにshow create table books_book;) 管理インターフェイスから列を再作成する方法を確認できます。そこから列を作成するための構文を取得して で使用しalter tableますが、NOT NULL を NULL に置き換えます。

于 2012-10-13T13:47:28.630 に答える
0

これはMySQL 5.5で完全に機能します

ALTER TABLE books_book CHANGE publication_date publication_date DATE;

于 2013-05-06T10:31:45.263 に答える