MySQLの既存の列にnullでない制約を追加する方法


164

「Person」というテーブル名に次の列名があります

P_Id(int),
LastName(varchar),
FirstName (varchar).

NOT NULL制約を与えるのを忘れましたP_Id

次のクエリを試してNOT NULL、既存の列に制約を追加しましたP_Id

1. ALTER TABLE  Person MODIFY  (P_Id NOT  NULL);
2. ALTER TABLE Person ADD CONSTRAINT NOT  NULL NOT NULL (P_Id);

構文エラーが発生しています...

回答:


261

ALTER TABLE... MODIFY...クエリを使用NOT NULLして、既存の列定義に追加するだけです。例えば:

ALTER TABLE Person MODIFY P_Id INT(11) NOT NULL;

注意:クエリを使用するときは、完全な列定義を再度指定する必要がありMODIFYます。たとえば、列にDEFAULT値や列コメントがある場合MODIFYは、データ型ととともにステートメントで指定する必要があります。指定しない場合、データNOT NULLは失われます。このような事故を防ぐための最も安全な方法は、SHOW CREATE TABLE YourTableクエリの出力から列定義をコピーし、NOT NULL制約を含めるように変更して、クエリに貼り付けることALTER TABLE... MODIFY...です。


4
@肯定的な理由INT(11)だけでなく、なぜあなたは書いたのINTですか?の効果は何11ですか?
スザンヌデュペロン2013年

2
11は単なる例であり、P_Idの長さを設定します。変更したくない場合でも、再度追加する必要があるかどうかはわかりません。
ジェラール

2
@Pacerierがchange列の名前を変更する
Javier P

1
@Victor MODIFYもOracleでサポートされています。そして、PostgreSQLはステートメントをCHANGE提供する代わりにサポートしませんALTER [COLUMN]
デスレス氏、2015年

1
注意事項:構造化クエリ言語は標準のクエリ言語ではありません...
Dmitry

20

これを試してください、あなたは変更と修正の違いを知っています、

ALTER TABLE table_name CHANGE curr_column_name new_column_name new_column_datatype [constraints]

ALTER TABLE table_name MODIFY column_name new_column_datatype [constraints]
  • を使用して、特定の列の名前とデータ型を変更できますCHANGE
  • を使用して、特定の列のデータ型を変更できますMODIFY。このステートメントを使用して列の名前を変更することはできません。

うまくいきました。


5
変更するためにMODIFY操作を実行しましたが、逆は不可能ですか?
Navrattan Yadav 2016

1
奇妙なことに、null_heart_rate_countという名前の列を変更または変更すると、エラー(MySQL 5.6、Workbench 6.3)が発生し、エラーは#1138、NULL値の無効な使用でした。代わりに、列をドロップして追加する必要がありました。
ウィリアムT.マラード2017

@NavrattanYadav彼は逆ではなく名前を変更するつもりだったと思います
shaahiin
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.