MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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」が発生するため、データの整合性を保ちたいカラムに有効な制約です。

  1. 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

  2. PythonでMySQLのテーブルに新しい列(カラム)を追加する方法

    既存のテーブルに後から新しい列を追加したい場面は少なくありません。例えば、「Students(学生)」というテーブルに「Name(名前)」「Age(年齢)」「Roll no(出席番号)」といった列があるとします。ここに、新しく「Address(住所)」という列を追加したい場合、どうすればよいのでしょうか。このようなときに活躍するのがALTERコマンドです。ALTERコマンドは、データベース内の列を変更・削除・更新するためのコマンドで、ADD句と組み合わせることで、テーブルに新しい列を追加することもできます。構文ALTER TABLE table_name ADD new_column_name