MySQLのテーブルにCHECK制約を追加する方法をわかりやすく解説
MySQLのテーブルにチェック制約(CHECK制約)を追加する方法
データベースの品質を保つうえで、テーブルに保存される値を制限したい場面は多くあります。たとえば「年齢は45歳以上でなければならない」といったルールを強制したい場合、チェック制約(CHECK制約)が有効です。この記事では、MySQLでテーブル作成時にCHECK制約を追加する手順を、具体例とともにわかりやすく解説します。
基本構文:CREATE TABLE時にCHECK制約を定義する
テーブルにCHECK制約を追加するには、まずテーブルを作成します。CREATE TABLE文の中で、カラム定義の後にcheck(条件)を記述するのが基本的な書き方です。
CREATE table yourTableName (
Column_name1 datatype,
...
Column_nameN datatype,
check(condition)
);
例:年齢が45以上であることを検証するCHECK制約
たとえば、年齢(Age)が必ず45以上であることを保証したい場合は、次のような条件を指定します。
check(Age>=45)
この条件により、45未満の値を挿入しようとした場合、MySQLはエラーを返し、データの挿入を拒否します。
実際にテーブルを作成してみよう
それでは、上記のCHECK制約を組み込んだテーブルを実際に作成してみましょう。
mysql> CREATE table addCheckConstraintDemo -> ( -> Age int, -> check(Age>=45) -> ); Query OK, 0 rows affected (0.55 sec)
「Query OK」と表示されれば、テーブルの作成は成功です。これで、このテーブルには「Ageは45以上」というルールが適用されます。
動作確認:制約違反時の挙動
制約が正しく機能しているか確認してみましょう。たとえば、次のように45未満の値を挿入しようとするとエラーになります。
mysql> INSERT INTO addCheckConstraintDemo VALUES (40); ERROR 3819 (HY000): Check constraint 'addCheckConstraintDemo_chk_1' is violated.
一方、45以上の値であれば正常に挿入できます。
mysql> INSERT INTO addCheckConstraintDemo VALUES (50); Query OK, 1 row affected (0.10 sec)
補足:MySQLバージョンによる注意点
CHECK制約の扱いはMySQLのバージョンによって異なる点に注意が必要です。
- MySQL 8.0.16以降:CHECK制約が正式にサポートされており、定義した条件が厳密に適用されます。
- MySQL 8.0.15以前および5.7系:CHECK制約の構文自体は受け入れられますが、実際には無視され、条件違反のデータも挿入できてしまいます。
そのため、古いバージョンを使用している環境では、トリガー(TRIGGER)やアプリケーション側でのバリデーションなど、別の手段でデータの整合性を担保することをおすすめします。
まとめ
MySQLでは、CREATE TABLE文内にcheck(条件)を記述するだけで、簡単にCHECK制約を追加できます。これにより、不正なデータの登録をデータベースレベルで防ぐことが可能になります。ただし、バージョンによって挙動が異なるため、使用中のMySQLのバージョンを事前に確認しておくことが重要です。
-
MySQLのバージョンを確認する方法をわかりやすく解説
この記事では、現在利用しているMySQLサーバーのバージョンを確認する方法について詳しく解説します。コンソールでクエリを実行する前に、まずクライアントがサーバーに正しく接続されていることを確認しておきましょう。接続が確立されていないと、クエリを実行しても結果を取得できません。MySQLのバージョンを確認する基本クエリ以下のクエリを実行すると、使用中のサーバーのバージョン番号と、実行時点の日付を同時に取得できます。mysql> SELECT VERSION(), CURRENT_DATE;ポイント: 関数「VERSION()」や「CURRENT_DATE」は大文字・小文字を区別しません。つ
-
PythonでMySQLのテーブルに新しい列(カラム)を追加する方法
既存のテーブルに後から新しい列を追加したい場面は少なくありません。例えば、「Students(学生)」というテーブルに「Name(名前)」「Age(年齢)」「Roll no(出席番号)」といった列があるとします。ここに、新しく「Address(住所)」という列を追加したい場合、どうすればよいのでしょうか。このようなときに活躍するのがALTERコマンドです。ALTERコマンドは、データベース内の列を変更・削除・更新するためのコマンドで、ADD句と組み合わせることで、テーブルに新しい列を追加することもできます。構文ALTER TABLE table_name ADD new_column_name