MySQL 8.0 の新機能 - チェック制約の紹介

MySQL 8.0 の新機能 - チェック制約の紹介

序文

MySQL 8.0 では、チェック制約という非常に便利な新機能が導入されました。これにより、不正または不合理なデータ書き込みに対する制御が向上します。詳しく見てみましょう。

チェック制約

作成、削除、表示

(1)テーブル作成時にチェック制約を作成できます。

mysql> テーブル t1 を作成します
 -> (
 -> チェック (c1 <> c2)、
 -> c1 INT チェック (c1 > 10)、
 -> c2 INT 制約 c2_positive チェック (c2 > 0)、
 -> c3 INT チェック (c3 < 100)、
 -> 制約 c1_nonzero チェック (c1 <> 0)、
 -> チェック (c1 > c3)
 -> );
クエリは正常、影響を受けた行は 0 行 (0.03 秒)

(2)次の文を使用してチェック制約を追加することもできます。

mysql> ALTER TABLE t1 制約 c3_nonzero CHECK ((c3<>0)) を追加します。
クエリは正常、影響を受けた行は 0 行 (0.16 秒)
レコード: 0 重複: 0 警告: 0

(3)次の文を使ってチェック制約を削除することができます。

mysql> ALTER TABLE t1 DROP CONSTRAINT c3_nonzero;
クエリは正常、影響を受けた行は 0 行 (0.02 秒)
レコード: 0 重複: 0 警告: 0

(4)テーブル構造をクエリすることでチェック制約を表示できます。

mysql> SHOW CREATE TABLE t1_G
************************** 1. 行 ****************************
 表: t1
テーブルの作成: CREATE TABLE `t1` (
 `c1` int デフォルト NULL,
 `c2` int デフォルト NULL,
 `c3` int デフォルト NULL,
 制約 `c1_nonzero` チェック ((`c1` <> 0))、
 制約 `c2_positive` チェック ((`c2` > 0))、
 制約 `t1_chk_1` チェック ((`c1` <> `c2`)),
 制約 `t1_chk_2` チェック ((`c1` > 10))、
 制約 `t1_chk_3` チェック ((`c3` < 100))、
 制約 `t1_chk_4` チェック ((`c1` > `c3`))
) エンジン=InnoDB デフォルト文字セット=utf8mb4 照合=utf8mb4_0900_ai_ci
セット内の 1 行 (0.00 秒)

(5) 次の 2 つのビューを通じて表示することもできます。table_constraints はテーブルに存在する制約を照会し、check_constraints はチェック制約の特定の定義を照会します。

mysql> SELECT * FROM information_schema.table_constraints WHERE table_name='t1';
+--------------------+-------------------+-----------------+--------------+------------+-----------------+----------+
| CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME | TABLE_SCHEMA | TABLE_NAME | CONSTRAINT_TYPE | ENFORCED |
+--------------------+-------------------+-----------------+--------------+------------+-----------------+----------+
| def | テスト | c1_nonzero | テスト | t1 | チェック | はい |
| def | テスト | c2_positive | テスト | t1 | チェック | はい |
| def | テスト | t1_chk_1 | テスト | t1 | チェック | はい |
| def | テスト | t1_chk_2 | テスト | t1 | チェック | はい |
| def | テスト | t1_chk_3 | テスト | t1 | チェック | はい |
| def | テスト | t1_chk_4 | テスト | t1 | チェック | はい |
+--------------------+-------------------+-----------------+--------------+------------+-----------------+----------+
セット内の 6 行 (0.00 秒)

mysql> SELECT * FROM information_schema.check_constraints WHERE constraint_name='c1_nonzero';
+--------------------+-------------------+-----------------+--------------+
| CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME | CHECK_CLAUSE |
+--------------------+-------------------+-----------------+--------------+
| 定義 | テスト | c1_nonzero | (`c1` <> 0) |
+--------------------+-------------------+-----------------+--------------+
セット内の 1 行 (0.00 秒)

(6)チェック制約を満たさないデータを挿入すると、エラーが直接報告されます。

mysql> t1 に値 (0,0,0) を挿入します。
エラー 3819 (HY000): チェック制約 'c1_nonzero' に違反しています。

制限

(1)自動増分列と他のテーブルの列はチェック制約をサポートしていない

(2)CONNECTION_ID()、CURRENT_USER()、NOW()などの不確実な関数はチェック制約をサポートしていません。

(3)ユーザー定義関数はチェック制約をサポートしていない

(4)ストアドプロシージャはチェック制約をサポートしていない

(5)変数はチェック制約をサポートしていない

(6)サブクエリはチェック制約をサポートしていない

要約する

チェック制約は、さまざまなデータ検証シナリオを実現できる非常に優れた機能です。ぜひお試しください。

以上がMySQL 8.0の新機能であるチェック制約の簡単な紹介です。MySQL 8.0の新機能であるチェック制約の詳細については、123WORDPRESS.COMの他の関連記事にご注目ください。

以下もご興味があるかもしれません:
  • MySQL の null 制約のケースの説明
  • MySQL 外部キー制約 (FOREIGN KEY) ケースの説明
  • MySQL 外部キー制約とテーブル関係の概要
  • MySQL 整合性制約の定義と例のチュートリアル
  • MySQL での外部キーの作成、制約、削除
  • MySQL のインデックスと制約の例文
  • MySQL 外部キー制約の例の説明
  • MySQL 外部キー制約の詳細な説明
  • MySQL 整合性制約の例の詳細な説明
  • MySQL 制約の超詳細な説明

<<:  docker run -v はデータボリュームを異常にマウントし、コンテナのステータスは常に再起動になります。

>>:  HTMLリンクタグのrel属性

推薦する

チェックボックスの不確定プロパティの使用の紹介

Windows XP でフォルダーのプロパティ ダイアログ ボックスを使用すると、フォルダーの属性カ...

HTML でテーブルを分割および結合する (colspan、rowspan)

このコードは水平マージを示しています。 <!DOCTYPE html PUBLIC "...

MySQLで置換関数を実装するためのいくつかの実用的なシナリオ

REPLACE構文REPLACE(String,from_str,to_str)つまり、String...

Vue3 シングルファイルコンポーネントのスタイル機能の詳細な説明

目次スタイルスコープスタイルモジュール状態駆動型動的CSS要約するスタイルスコープ注意事項:スタイル...

ウェブページの読み込み進捗状況バーの詳細な説明(推奨)

(Web ページの読み込み中に、コンテンツが多すぎて読み込みと待機が続くことがあります。このとき、...

Javascript のスコープとクロージャの詳細

目次1. 範囲2. スコープチェーン3. 語彙の範囲5. 閉鎖の適用6. クロージャの欠陥7. 閉会...

Linux プログラムの実行中に動的ライブラリをロードできない場合の解決策

Linux でダイナミック ライブラリをロードできません次のような異常事態が発生した場合./test...

このような大画面のデジタルスクロール効果が必要になる場合があります

大画面のデジタル スクロール効果は、最近の作業における大画面 UI ダイアグラムから生まれました。U...

ウェブページのフッターで注意すべきことのまとめ

たくさんのリンクおそらく、このようなサイトをたくさん見たことがあるでしょう。ページの下部に 50 個...

純粋なCSS3で実装されたネオンライト効果

達成される効果は次のとおりです。 マウスがボタン内に移動すると、ネオンライトのような効果が生成され、...

MySQL インデックス最適化の説明

日常業務では、実行に時間のかかる SQL ステートメントを記録するために、スロー クエリを実行するこ...

MySQLからMariaDBへのスムーズな移行のための詳細な手順

1. MariaDB と MySQL の紹介1. MariaDB の紹介MariaDB は、MySQ...

Linux CRM デプロイメント コードの詳細な説明

Linuxの基本設定 Linux環境でpython3をコンパイルしてインストールする 1. Linu...

MySQL 8.0.15 のインストールと設定方法のグラフィックチュートリアル

この記事ではMySQL 8.0.15のインストールと設定方法を参考までに記録します。具体的な内容は以...

MySQL がデフォルトの分離レベルとして繰り返し読み取りを選択する理由

目次Oracle 分離​​レベルMySQL 分離レベル要約する多くの読者は、MySQL のトランザク...