MySQLでNOT NULL制約のカラムを追加する方法|テーブル作成時と既存テーブルへの追加を解説
MySQLでNOT NULL列を追加する2つの方法
MySQLでは、NOT NULL制約を持つカラム(列)を追加する場面として、主に次の2つのケースがあります。
- ケース1: テーブルを作成する際にNOT NULL列を定義する
- ケース2: 既存のテーブルに後からNOT NULL列を追加する
それぞれの手順と実際の動作を、具体例とともに詳しく見ていきましょう。
ケース1:テーブル作成時にNOT NULL列を追加する
テーブル作成時にNOT NULL制約を設定する場合の基本構文は以下のとおりです。
CREATE TABLE yourTableName
(
yourColumnName1 dataType NOT NULL,
yourColumnName2 dataType
.
.
.
N
);
実際にテーブルを作成するクエリの例がこちらです。
mysql> create table NotNullAtCreationOfTable
-> (
-> Id int not null,
-> Name varchar(100)
-> );
Query OK, 0 rows affected (0.60 sec)
上記のテーブルでは、Idカラムをint型かつNULL値を許容しない(NOT NULL)として宣言しています。このため、IdにNULL値を挿入しようとするとエラーが発生します。
NULLを挿入した場合のエラーは次のとおりです。
mysql> insert into NotNullAtCreationOfTable values(NULL,'John'); ERROR 1048 (23000): Column 'Id' cannot be null
一方、NULL以外の値であれば問題なく挿入できます。
mysql> insert into NotNullAtCreationOfTable values(1,'Carol'); Query OK, 1 row affected (0.13 sec)
SELECT文でテーブル内のレコードを表示して確認してみましょう。
mysql> select *from NotNullAtCreationOfTable;
実行結果は以下のようになります。
+----+-------+ | Id | Name | +----+-------+ | 1 | Carol | +----+-------+ 1 row in set (0.00 sec)
ケース2:既存のテーブルにNOT NULL列を追加する
すでに存在するテーブルにNOT NULL列を追加する場合は、ALTER TABLE文を使用します。基本構文は以下のとおりです。
ALTER TABLE yourTableName ADD yourColumnName NOT NULL
まず、検証用のテーブルを作成します。
mysql> create table AddNotNull
-> (
-> Id int,
-> Name varchar(100)
-> );
Query OK, 0 rows affected (1.43 sec)
続いて、ALTERコマンドを使って既存のテーブルにNOT NULL制約付きのカラムを追加します。ここでは、NOT NULL制約を持つ「Age」カラムを追加してみましょう。
mysql> alter table AddNotNull add Age int not null; Query OK, 0 rows affected (0.44 sec) Records: 0 Duplicates: 0 Warnings: 0
descコマンドでテーブル構造を確認すると、AgeカラムのNull欄が「NO」になっていることがわかります。
mysql> desc AddNotNull;
実行結果は以下のとおりです。
+-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | Id | int(11) | YES | | NULL | | | Name | varchar(100) | YES | | NULL | | | Age | int(11) | NO | | NULL | | +-------+--------------+------+-----+---------+-------+ 3 rows in set (0.08 sec)
それでは、AgeカラムにNULL値を挿入してみます。NOT NULL制約が設定されているため、エラーが発生します。
mysql> insert into AddNotNull values(1,'John',NULL); ERROR 1048 (23000): Column 'Age' cannot be null
今度は、IdとNameにNULLを指定した別のレコードを挿入してみます。Ageには有効な値を入れているため、今度はエラーになりません。
mysql> insert into AddNotNull values(NULL,NULL,23); Query OK, 1 row affected (0.22 sec)
最後に、SELECT文ですべてのレコードを表示して確認しましょう。
mysql> select *from AddNotNull;
実行結果は以下のとおりです。
+------+------+-----+ | Id | Name | Age | +------+------+-----+ | NULL | NULL | 23 | +------+------+-----+ 1 row in set (0.00 sec)
まとめ
MySQLでNOT NULL列を扱うには、テーブル作成時にカラム定義へ「NOT NULL」を付ける方法と、ALTER TABLE文で既存テーブルにNOT NULL制約付きカラムを追加する方法があります。どちらの場合も、NOT NULLが設定されたカラムにNULLを挿入すると「ERROR 1048」が発生するため、データの整合性を保ちたいカラムに有効な制約です。
-
MySQLの既存のカラムにNOT NULL制約を設定する方法
MySQLですでに存在するカラムにNOT NULL制約を追加するには、ALTER TABLE文を使用します。この記事では、実際のSQL例を使いながら、NOT NULL制約の設定方法とその動作確認の手順をわかりやすく解説します。 1. テーブルの作成 まず、検証用のサンプルテーブルを作成します。 mysql> create table DemoTable1949 ( UserId int, UserName varchar(20) ); Query OK, 0 rows affected (0.00 sec) この時点では、UserNameカラムにはNUL
-
PythonでMySQLのテーブルに新しい列(カラム)を追加する方法
既存のテーブルに後から新しい列を追加したい場面は少なくありません。例えば、「Students(学生)」というテーブルに「Name(名前)」「Age(年齢)」「Roll no(出席番号)」といった列があるとします。ここに、新しく「Address(住所)」という列を追加したい場合、どうすればよいのでしょうか。このようなときに活躍するのがALTERコマンドです。ALTERコマンドは、データベース内の列を変更・削除・更新するためのコマンドで、ADD句と組み合わせることで、テーブルに新しい列を追加することもできます。構文ALTER TABLE table_name ADD new_column_name