MySQL のインデックスと制約の例文

MySQL のインデックスと制約の例文

外部キー

テーブルの主キーがどのテーブルの外部キーであるかを照会する

選択
	テーブル名、
	列名、
	制約名、
	参照テーブル名、
	参照列名
から
	INFORMATION_SCHEMA.KEY_COLUMN_USAGE
どこ
	TABLE_SCHEMA = 'mydbname'
	AND REFERENCED_TABLE_NAME = 'テーブル名';

すべての外部キーステートメントをエクスポートする

選択
	CONCAT('ALTER TABLE ', TABLE_NAME, ' ADD CONSTRAINT ', CONSTRAINT_NAME, ' FOREIGN KEY (', COLUMN_NAME, ') REFERENCES ', REFERENCED_TABLE_NAME, '(', REFERENCED_COLUMN_NAME, ') ON DELETE CASCADE ON UPDATE CASCADE;')
から
	INFORMATION_SCHEMA.KEY_COLUMN_USAGE
どこ
	TABLE_SCHEMA = 'mydbname'
	かつ、REFERENCED_TABLE_NAME が NULL ではありません。

すべての外部キーステートメントを削除する

選択
	CONCAT('ALTER TABLE', テーブル名, 'DROP FOREIGN KEY', 制約名, ';')
から
	INFORMATION_SCHEMA.KEY_COLUMN_USAGE
どこ
	TABLE_SCHEMA = 'mydbname'
	かつ、REFERENCED_TABLE_NAME が NULL ではありません。

自動増分

自動増分フィールドを作成するためのステートメントをエクスポートします

選択
	CONCAT( 'ALTER TABLE `', TABLE_NAME, '` ', 'MODIFY COLUMN `', COLUMN_NAME, '` ', UPPER( COLUMN_TYPE ), ' NOT NULL AUTO_INCREMENT COMMENT "',COLUMN_COMMENT,'";' ) を 'ADD_AUTO_INCREMENT' として追加します
から
	情報スキーマ.COLUMNS 
どこ
	TABLE_SCHEMA = 'mydbname' 
	AND EXTRA = UPPER( 'AUTO_INCREMENT' ) 
注文する
	テーブル名ASC;

すべての自動増分フィールドを作成および削除する

選択
	CONCAT( 'ALTER TABLE `', TABLE_NAME, '` ', 'MODIFY COLUMN `', COLUMN_NAME, '` ', UPPER( COLUMN_TYPE ), ' NOT NULL;' ) を 'DELETE_AUTO_INCREMENT' として
から
	情報スキーマ.COLUMNS 
どこ
	TABLE_SCHEMA = 'mydbname' 
	AND EXTRA = UPPER( 'AUTO_INCREMENT' ) 
注文する
	テーブル名ASC;

索引

すべてのインデックスをエクスポート

選択
	連結(
		'ALTER TABLE `'、
		テーブル名、
		'` ',
		'追加 '、
	もし
		(
			非ユニーク = 1、
		場合
				UPPER(インデックスタイプ) 
				「FULLTEXT」の場合
				「フルテキストインデックス」 
				「空間」の場合
				'空間インデックス' ELSE CONCAT( 'インデックス `', INDEX_NAME, '` USING ', INDEX_TYPE ) 
			終わり、
		もし
			(
				UPPER( INDEX_NAME ) = 'PRIMARY',
				CONCAT( 'PRIMARY KEY USING ', INDEX_TYPE ),
			CONCAT( 'UNIQUE INDEX `', INDEX_NAME, '` USING ', INDEX_TYPE ))),
		CONCAT( '(`', 列名, '`)' ),
		';' 
) 'ADD_ALL_INDEX' として 
から
	情報スキーマ.統計 
どこ
	TABLE_SCHEMA = 'mydbname' 
注文する
	テーブル名 ASC、
	インデックス名ASC;

すべてのインデックスを削除

選択
	CONCAT( 'ALTER TABLE `', TABLE_NAME, '` ', CONCAT( 'DROP ', IF ( UPPER( INDEX_NAME ) = 'PRIMARY', 'PRIMARY KEY', CONCAT( 'INDEX `', INDEX_NAME, '`' ))), ';' ) AS 'DELETE_ALL_INDEX' 
から
	情報スキーマ.統計 
どこ
	TABLE_SCHEMA = 'mydbname' 
注文する
	テーブル名ASC;

データ結合

データの移行やマージを行う際にさらに難しいのは、異なるデータベースの主キーが重複しているため、主キーの値を一括で変更する必要があることです。重複を避けるために、自動増分番号を文字列に変更することができます。

手順は基本的に次のとおりです

  • 主キーの自動増分をキャンセル
  • すべての外部キーを削除する
  • 主キーフィールドをvarcharに変更する
  • すべての外部キーを追加する
  • 主キーの値を変更する
  • データを結合する

主キーの値を変更するときは注意してください

id や pid などの自己関連付けの場合、値を直接変更できない場合は、まず制約を削除してから追加する必要があります。

例えば

自己制約の削除

テーブル `t_director` を変更し、外部キー `fk_directorpid` を削除します。

値を変更

t_director を更新し、directorid=directorid+100000000 を設定します。
t_directorを更新し、directorid=CONV(directorid,10,36)を設定します。

t_director を更新し、directorpid=directorpid+100000000 を設定します。ここで、directorpid は null ではありません。
t_director を更新し、directorpid が null ではない場合に directorpid=CONV(directorpid,10,36) を設定します。

自己制約の追加

ALTER TABLE t_director に、制約 fk_directorpid を追加し、外部キー (directorpid) を参照します。t_director(directorid) は、ON DELETE CASCADE、ON UPDATE CASCADE です。

知らせ

CONV(directorpid,10,36) の最後の 2 つのパラメーターは、元のデジタル基数と変換される基数です。

最初のパラメータは、内容が数値であれば、型が varchar であっても変換できます。

上記はMysqlのインデックスと制約のサンプルステートメントの詳細です。MySQLのインデックスと制約の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

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

<<:  Dockerは起動されていないコンテナの設定情報を変更します

>>:  Vue3 (III) ウェブサイトホームページレイアウト開発

推薦する

NestJsはMongooseを使用してMongoDBを操作する

最近、NestJs フレームワークを学び始めました。学習コストは他のフレームワークよりもはるかに高く...

Linux ハードウェア構成コマンドの例

ハードウェア ビュー コマンドシステム # uname -a # カーネル/オペレーティング システ...

ネイティブ js が携帯電話のプルダウン更新を模倣

この記事では、携帯電話のプルダウンリフレッシュを模倣したjsの具体的なコードを参考までに共有します。...

MySQL の InnoDB ストレージ ファイルの詳細な説明

物理的に言えば、InnoDB テーブルは、共有テーブルスペース ファイル (ibdata1)、排他テ...

CSS3 天子グリッドリストのスタイルの書き方

多くのプロジェクトでは、中央に灰色の分割線があり、両側に分割線がないグリッド表示の機能を実装する必要...

訪問者にあなたのウェブサイトを覚えてもらうための3つの便利なコード

訪問者があなたのウェブサイトを覚えておくのに役立つ3つの便利なコード。お気に入りに追加するためのヒン...

DockerでGit環境を構築して構成するプロセス

DockerでGit環境を構成する仕事上、Docker 環境で GitLab リポジトリを操作する必...

Dockerは1行のコマンドでFTPサービス構築の実装を完了します

1行のコマンド docker run -d \ -v /share:/home/vsftpd \ -...

Linux システムにおける時間設定の概要

1. 時間の種類は次のように分けられます。 1. ネットワーク時間(タイムゾーンの設定、ntpサーバ...

WeChatアプレットが検索ボックス機能を実装

この記事の例では、WeChatアプレットの検索ボックス機能を実装するための具体的なコードを参考までに...

シンプルな加算計算機の JavaScript 実装

この記事では、参考までに、加算計算機を実装するためのJavaScriptの具体的なコードを紹介します...

JavaScript の条件付きアクセス属性と矢印関数の紹介

目次1. 条件付きアクセス属性2. アロー関数の紹介1. 条件付きアクセス属性?. は ES2020...

MySQL からエクスポートされた scv ファイル内の文字化けやジャンプ行の問題をすばやく解決します

仕事上の理由により、完全なオンライン化(​​つまり、すべてのデータがオンラインで完了し、インポートや...

メンテナンスしやすい CSS コードを書くための 5 つのガイドライン

1. スタイルシートの先頭にコメント ブロックを追加して、スタイルシートの作成日、作成者、タグ、その...

Linux での Jenkins の詳細なインストール手順

目次1. JDKをインストールする2. Jenkinsをインストールする3. Jenkinsの設定を...