MySQLで日付型カラムにNULLを挿入する方法|ALTER TABLEによるカラム定義の変更手順
日付型(DATE)カラムにNULLを挿入したい場合、ALTER TABLE文とMODIFY句を使って、カラム定義をNULL許可に変更する必要があります。
基本の構文
alter table テーブル名 modify column カラム名 date NULL;
既存のテーブル構造はそのままに、指定したカラムだけをNULLを許容する形へ変更できます。
検証用テーブルを作成する
まず、日付カラムをNOT NULLとして定義したテーブルを作成します。
mysql> create table DemoTable
(
ShippingDate date NOT NULL
);
Query OK, 0 rows affected (0.78 sec)NOT NULLカラムにNULLを挿入するとどうなる?
作成したテーブルに対して、NULL値を挿入してみましょう。カラムがNOT NULLに設定されているため、この時点ではエラーが発生します。
mysql> insert into DemoTable values(null); ERROR 1048 (23000) - Column 'ShippingDate' cannot be null
「Column 'ShippingDate' cannot be null(ShippingDateカラムにNULLは格納できません)」というエラーメッセージが返されました。
ALTER TABLEでNULLを許可するように変更する
次に、テーブル定義を変更してNULLを許可するようにします。
mysql> alter table DemoTable modify column ShippingDate date NULL; Query OK, 0 rows affected (1.81 sec) Records : 0 Duplicates : 0 Warnings : 0
再度NULLを挿入してみる
テーブルの変更後にもう一度INSERT文を実行します。今度はNULLが受け入れられるため、エラーは発生しません。
mysql> insert into DemoTable values(null); Query OK, 1 row affected (1.21 sec)
登録結果を確認する
SELECT文でテーブル内のすべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行結果は以下の通りです。
+--------------+ | ShippingDate | +--------------+ | NULL | +--------------+ 1 row in set (0.00 sec)
このように、ShippingDateカラムにNULLが正常に登録されていることが確認できます。
まとめ
- 日付型カラムにNULLを挿入するには、
ALTER TABLE 〜 MODIFY COLUMNでNULL許可に変更する - NOT NULL制約が付いたままのカラムにNULLを挿入すると、エラー1048が発生する
- テーブル定義を変更すれば、既存データを壊すことなくNULLの登録が可能になる
-
MySQLのdate()関数で日付を照合し、テーブルの列を更新する方法
MySQLでは、date()関数とcurdate()関数を組み合わせることで、「日付部分だけ」を現在の日付と照合し、該当する行の列を更新できます。datetime型のカラムには時刻情報も含まれていますが、date()関数を使えば時刻を無視して日付のみを比較できるのがポイントです。基本構文date()関数で日付を照合しながら列を更新するための基本的な構文は以下の通りです。update yourTableName set yourColumnName=yourValue where date(yourColumnName)=curdate();サンプルテーブルの作成まず、動作確認用のテーブルを作成
-
MySQLでテーブルの重複を除いたレコードから平均値を取得するクエリの書き方
MySQLで平均値を求めるには AVG() 関数を使用します。さらに DISTINCT と組み合わせることで、重複しているレコードを除外した状態で平均を計算することができます。この記事では、実際にサンプルテーブルを作成しながら、個別(ユニーク)なレコードから平均値を取得する方法を解説します。サンプルテーブルの作成まず、以下のクエリでテーブルを作成します。mysql> create table DemoTable1934 ( StudentName varchar(20), StudentMarks int ); Query OK, 0 rows affec