web-dev-qa-db-ja.com

MySQLの既存の列に非NULL制約を追加する方法

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

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

NOT NULLP_Id制約を与えるのを忘れました。

次のクエリでNOT NULL ConstraintをP_Idという既存の列に追加してみました。

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

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

139
mymotherland

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

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

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

227
Shakti Singh

これを試してください。変更と変更の違いがわかります。

ALTER TABLE table_name CHANGE curr_column_name new_column_name new_column_datatype [constrints]

ALTER TABLE table_name MODIFY column_name new_column_datatype [constraints]

  • 変更するにはMODIFY操作を実行しますが、逆はできません。
  • CHANGEを使用して、特定の列の名前とデータ型を変更できます。
  • MODIFYを使用して、特定の列のデータ型を変更できます。このステートメントを使用して列の名前を変更することはできません。

希望、私は詳細に説明しました。

15
Maran Manisekar