ALTER TABLEステートメントでNULL値を含む列にNOT NULL制約を適用するとどうなる?
MySQLで、すでにNULL値が含まれている列に対してALTER TABLEステートメントを使ってNOT NULL制約を適用しようとすると、エラーが返されます。具体的には「データが切り詰められた(data truncated)」ことを示すエラーメッセージが表示され、制約の変更は実行できません。
具体例
以下の例を見てみましょう。テーブル「test2」には、「ID」列の2行目にNULL値が格納されています。
mysql> Select * from test2; +------+--------+ | ID | Name | +------+--------+ | 1 | Gaurav | | NULL | Rahul | +------+--------+ 2 rows in set (0.00 sec)
この状態で、ID列をNOT NULLとして再定義しようとすると、MySQLは次のようなエラーを返します。
mysql> ALTER TABLE TEST2 MODIFY ID INT NOT NULL; ERROR 1265 (01000): Data truncated for column 'ID' at row 2
このように、既存のNULL値がNOT NULL制約と矛盾するため、MySQLはエラー(ERROR 1265)を発生させて変更を拒否します。この問題を解決するには、先にUPDATEステートメントなどでNULL値を適切な値に置き換えてから、NOT NULL制約を適用する必要があります。
-
MySQLで既存のテーブルにNOT NULL制約付きの新しいカラムを追加する方法
すでに作成済みのテーブルに、NOT NULL制約を持つ新しいカラムを追加するには、ALTERコマンドを使用します。本記事では、実際にテーブルを作成し、NOT NULLカラムを追加して動作を確認する手順を解説します。 1. テーブルを作成する まずはサンプル用のテーブルを作成しましょう。以下のようにDemoTableを定義します。 mysql> create table DemoTable -> ( -> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> StudentName varcha
-
MySQLでNULLを含む列からNULL以外(NOT NULL)の値だけを抽出して表示する方法
MySQLのIS NOT NULLを使ってNULL以外の値のみを表示するMySQLで、NULLとNULL以外のレコードが混在する列からNULL以外の値だけを取得したい場合は、IS NOT NULL演算子を使用します。この記事では、実際にテーブルを作成しながら手順を解説します。1. テーブルの作成まず、日付型の列を持つサンプルテーブルを作成します。mysql> create table DemoTable1 ( DueDate date ); Query OK, 0 ro