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

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のバージョンを事前に確認しておくことが重要です。

  1. MySQLのバージョンを確認する方法をわかりやすく解説

    この記事では、現在利用しているMySQLサーバーのバージョンを確認する方法について詳しく解説します。コンソールでクエリを実行する前に、まずクライアントがサーバーに正しく接続されていることを確認しておきましょう。接続が確立されていないと、クエリを実行しても結果を取得できません。MySQLのバージョンを確認する基本クエリ以下のクエリを実行すると、使用中のサーバーのバージョン番号と、実行時点の日付を同時に取得できます。mysql> SELECT VERSION(), CURRENT_DATE;ポイント: 関数「VERSION()」や「CURRENT_DATE」は大文字・小文字を区別しません。つ

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

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