MySQLはライブラリ内の主キーなしでテーブルインスタンスコードを素早く取得します

MySQLはライブラリ内の主キーなしでテーブルインスタンスコードを素早く取得します

概要

MySQL データベースで主キーのないテーブルを表示するための SQL ステートメントをいくつかまとめてみましょう。見てみましょう。

1. テーブルの主キー情報を表示する

--テーブルの主キー情報を表示するSELECT
 t.テーブル名、
 t.制約タイプ、
 c.列名、
 c.ORDINAL_POSITION 
から
 INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS t、
 INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS c 
どこ
 t.テーブル名 = c.テーブル名 
 かつ t.CONSTRAINT_TYPE = 'PRIMARY KEY' 
 AND t.TABLE_NAME = '<TABLE_NAME>' 
 AND t.TABLE_SCHEMA = '<TABLE_SCHEMA>'; 


2. 主キーなしでテーブルを表示する

--主キーなしでテーブルを表示する SELECT table_schema, table_name,TABLE_ROWS
information_schema.tables から
WHERE (テーブルスキーマ、テーブル名) NOT IN (
SELECT DISTINCT テーブルスキーマ、テーブル名
information_schema.columns から
COLUMN_KEY = 'PRI' の場合
)
AND table_schema は ('sys'、'mysql'、'information_schema'、'performance_schema') に含まれません。 


3. 主キーのないテーブル

Innodb ストレージ エンジンでは、各テーブルに主キーがあり、データは主キーの順序で整理され、保存されます。このタイプのテーブルは、インデックス構成テーブルと呼ばれます。

テーブルの定義時に主キーが明示的に定義されていない場合、主キーは次のように選択または作成されます。

1) まず、テーブルに「空でない一意のインデックス」があるかどうかを確認します。ある場合は、

「空でない一意のインデックス」が1つだけの場合、このインデックスが主キーになります。

「空でない一意のインデックス」が複数ある場合は、インデックスの順序に従って、最初に定義された空でない一意のインデックスが主キーとして選択されます。

2) テーブル内に「空でない一意のインデックス」がない場合、6 バイトのポインタが主キーとして自動的に作成されます。

主キー インデックスにインデックス キーが 1 つしかない場合は、_rowid を使用して主キーを表示できます。実験テストは次のとおりです。

--テストテーブルを削除します。DROP TABLE IF EXISTS t1;
​
--テストテーブルを作成する CREATE TABLE `t1` (
 `id` int(11) NULLではない、
 `c1` int(11) デフォルト NULL,
 ユニーク uni_id (ID)、
 インデックスidx_c1(c1)
)ENGINE = InnoDB CHARSET = utf8;
​
--テストデータを挿入します INSERT INTO t1 (id, c1) SELECT 1, 1;
t1 (id, c1) に挿入し、2, 2 を選択します。
t1 (id, c1) に挿入し、4, 4 を選択します。
​
--データと_rowidを表示する
t1から*、_rowidを選択します。 


id 列はテーブル内の最初の一意かつ NOT NULL インデックスであるため、上記の _rowid は id の値と同じであることがわかります。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。

以下もご興味があるかもしれません:
  • 不足している主キーテーブル情報を取得するための MYSQL ステートメント

<<:  vue3 のさまざまな構文形式を比較したサンプルコード

>>:  Centos6.6 で php7 + nginx 環境をインストールする方法

推薦する

mysql における mydumper と mysqldump の比較

いくつかのテーブルまたは単一のデータベースのみをバックアップする場合は、innobackup よりも...

JSホモロジー戦略とCSRFの詳細な説明

目次概要同一生成元ポリシー (SOP)相同制限クロスドメインをバイパスクロスサイトリクエストフォージ...

Windows10システムにスーパーセットをインストールする手順

Superset は、エレガントなインターフェースとデータ テーブルに基づく動的なデータ生成を主な機...

antd pro に基づく SMS 認証コード ログイン機能 (プロセス分析)

目次まとめ全体的なプロセスフロントエンドページコード検証コードとログイン サービスをリクエストする ...

dockerにmysqlをインストールした後にNavicatが接続できない問題に対する完璧な解決策

1. Dockerがイメージをプルするdocker pull mysql (デフォルトで最新バージョ...

Vueカスタム指示により、ポップアップウィンドウのドラッグ4辺ストレッチと対角ストレッチ効果を実現

導入同社の最近の Vue フロントエンド プロジェクトの要件: ポップアップ ウィンドウのドラッグ、...

JS を使って CSS3 で丸い角を実装する方法

IE で CSS3 を使用して角を丸くする方法を探していたときに、例を見つけました。まだテストして...

データ構造 - ツリー (III): 多方向検索ツリー B ツリー、B+ ツリー

多方向探索ツリー完全二分木の高さ: O(log2N)、ここで2は対数完全なM方向探索木の高さ: O(...

Kubernetes コントローラーとラベルの簡単な分析

目次01 k8sの一般的なコントローラーRCコントローラーデプロイメント コントローラーステートフル...

MySQLクエリツリー構造方式

目次MySQL クエリツリー構造1. ツリー構造について2. MySQLでカスタム関数を定義する方法...

React Nativeでaxiosを使用してネットワークリクエストを行う方法

フロントエンド開発では、Ajax、jQuery ajax、axios、fetch など、データ要求を...

Linux コマンド sort、uniq、tr ツールの詳細な説明

並べ替えツールLinux の sort コマンドは、テキスト ファイルの内容を並べ替えるために使用さ...

Docker-compose を使用して GitLab をデプロイする方法

Docker-compose は GitLab をデプロイします1. Dockerをインストールする...

Nginx で HTTPS 証明書を構成する詳細なプロセス

1. HttpとHttpsの違いHTTP: インターネットで最も広く使用されているネットワーク プロ...

CSS3で実装された水平ヘッダーメニュー

結果:実装コードhtml <nav class="dropdownmenu"...