INFORMATION_SCHEMA: MariaDBの制約値を取得する

2024-04-02

MariaDBで制約値を表示する方法

SHOW CREATE TABLE ステートメントを使う

このステートメントは、テーブルのDDL (Data Definition Language) を表示します。DDLには、テーブルの構造、制約、インデックスなどの情報が含まれます。

SHOW CREATE TABLE テーブル名;

例:

SHOW CREATE TABLE employees;

出力例:

CREATE TABLE `employees` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `age` int(11) DEFAULT NULL,
  `PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

上記の例では、employees テーブルには PRIMARY KEY 制約が設定されていることが分かります。

INFORMATION_SCHEMA データベースには、MariaDBのすべてのテーブルに関するメタデータが格納されています。このデータベースの TABLE_CONSTRAINTS テーブルには、各テーブルの制約に関する情報が含まれます。

SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE TABLE_SCHEMA = 'データベース名'
AND TABLE_NAME = 'テーブル名';
SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE TABLE_SCHEMA = 'test'
AND TABLE_NAME = 'employees';
CONSTRAINT_NAME | TABLE_SCHEMA | TABLE_NAME | CONSTRAINT_TYPE | ENFORCED | REFERENCE_TABLE_SCHEMA | REFERENCE_TABLE_NAME | REFERENCE_COLUMN_NAME
-------------- | ------------- | ------------- | -------------- | -------- | ------------------------ | ---------------------- | ------------------------
PRIMARY        | test         | employees      | PRIMARY KEY    | YES     | NULL                     | NULL                     | NULL

GUIツールを使う

MySQL WorkbenchなどのGUIツールを使うと、制約値を簡単に表示することができます。

補足

  • SHOW CREATE TABLE ステートメントは、制約値だけでなく、テーブルの構造に関するその他の情報も表示します。
  • INFORMATION_SCHEMA データベースを使う方法は、より詳細な情報を表示することができます。
  • GUIツールを使う方法は、最も簡単で分かりやすい方法です。



SHOW CREATE TABLE employees;
CREATE TABLE `employees` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `age` int(11) DEFAULT NULL,
  `PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INFORMATION_SCHEMA データベースを使う

SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE TABLE_SCHEMA = 'test'
AND TABLE_NAME = 'employees';
CONSTRAINT_NAME | TABLE_SCHEMA | TABLE_NAME | CONSTRAINT_TYPE | ENFORCED | REFERENCE_TABLE_SCHEMA | REFERENCE_TABLE_NAME | REFERENCE_COLUMN_NAME
-------------- | ------------- | ------------- | -------------- | -------- | ------------------------ | ---------------------- | ------------------------
PRIMARY        | test         | employees      | PRIMARY KEY    | YES     | NULL                     | NULL                     | NULL
  • 上記のサンプルコードは、MariaDB 10.5.14で動作確認しています。
  • 他のバージョンの MariaDB では、構文や出力結果が異なる場合があります。



MariaDBで制約値を表示する他の方法

EXPLAIN ステートメントは、クエリの実行計画を表示します。実行計画には、テーブルの制約に関する情報も含まれます。

EXPLAIN SELECT * FROM テーブル名;
EXPLAIN SELECT * FROM employees;
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra
-- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | --------
1 | SIMPLE | employees | NULL | ALL | NULL | NULL | NULL | NULL | 100 | 100 | Using where; Using index

mysql コマンドラインツールを使って、制約値を表示することができます。

mysql -u ユーザー名 -p パスワード -D データベース名 -e "SHOW CREATE TABLE テーブル名;"
mysql -u root -p password -D test -e "SHOW CREATE TABLE employees;"
CREATE TABLE `employees` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `age` int(11) DEFAULT NULL,
  `PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

その他のツールを使う

  • mysql コマンドラインツールを使う方法は、シンプルで分かりやすい方法です。
  • その他のツールを使う方法は、GUIで操作したい場合に便利です。

mariadb


MariaDB ストアドプロシージャー:カーソル、OUTパラメータ、TEMPORARY TABLE を活用した複数行処理

カーソルを使用するMariaDB ストアドプロシージャーで複数行を返す最も一般的な方法は、カーソルを使用することです。カーソルは、結果セット内の行を順に処理するためのポインターです。例:この例では、get_all_users というストアドプロシージャーを作成しています。このストアドプロシージャーは、users テーブルからすべての行を取得し、カーソルを使用して処理します。...


【保存失敗】MySQLとMariaDBで発生する「キーが長すぎる」エラーの原因と対処法

MySQL で問題なく動作するスクリプトが、MariaDB で実行すると "key was too long in mariadb, but same script with same encoding works on mysql" というエラーが発生する。...


【MySQL/MariaDB】ORDER BY句が無視される問題を解決!5つの方法を徹底解説

次のクエリを考えてみましょう。このクエリは、customers テーブル内のすべてのレコードを名前順に取得します。しかし、次のクエリはどうでしょうか?このクエリは、Tokyo 市内に住むすべての顧客の名前順に取得するはずです。しかし、実際には、ORDER BY 句は無視され、ランダムな順序で顧客レコードが返されます。...


トラブルシューティング:WAMPサーバーからMySQLサービスを削除できない場合

方法1:WAMPサーバーマネージャーを使用する左側のメニューから「MySQL」を選択します。「サービスの停止」ボタンをクリックします。確認メッセージが表示されたら、「はい」をクリックします。方法2:コマンドプロンプトを使用するコマンドプロンプトを開きます。...


MySQL/MariaDBで特定の曜日の前々回以降の行を効率的に取得する3つの方法

この方法は、サブクエリを使用して、特定の曜日の前々回の日にちを取得し、その日以降のすべての行を選択します。説明:LAST_DAY(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH)):前月の最終日を取得します。...


SQL SQL SQL SQL Amazon で見る



CHECK制約で参照できるテーブルって?MariaDBでできること

例:従業員のテーブル employees と、その従業員が所属する部門のテーブル departments があるとします。employees テーブルの department_id 列は、departments テーブルの id 列を参照する必要があります。


MariaDBでストアドプロシージャを使用して制約チェックを実装する

この制限は、データの整合性を保証するためのものです。制約チェックが常に評価可能であることが重要であり、関数呼び出しは常に同じ結果を返すとは限りません。関数呼び出しを含む制約チェックが必要な場合は、いくつかの代替手段があります。ストアドプロシージャを使用する: ストアドプロシージャは、データベース内で呼び出すことができる事前定義された一連のSQL ステートメントです。ストアドプロシージャを使用して、制約チェックに必要なロジックをカプセル化できます。


データ型と制約条件の罠!MariaDBで「MariaDB constraint is incorrectly formed although columns are of the same type」エラーが発生する理由と解決方法

原因と解決策:このエラーが発生する主な原因は データ型と制約条件の不一致 です。具体的には、以下のケースが考えられます。データ型の範囲と制約条件の範囲が一致していない例えば、INT型カラムにCHECK制約で範囲を指定する場合、制約条件の範囲がINT型の許容範囲を超えていないことを確認する必要があります。