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) ウェブサイトホームページレイアウト開発

推薦する

JS配列インデックス検出におけるデータ型の問題の詳細な説明

WeChat アプレット プロジェクトを書いていたとき、その中に「都市選択」機能がありました。作者は...

VScode設定のリモートデバッグLinuxプログラムの問題を解決する

VScode リモートデバッグ Linux プログラムの問題について見てみましょう。具体的な内容は以...

CSS3を使用してフォントカラーグラデーションを実装する

Animation.css を使うと公式サイトのフォントがだんだんと変わっていくのが分かりました。c...

ローカル写真をアップロードする前にプレビューコード例を実装するための HTML5 と jQuery

HTML5 と jQuery はアップロード前にローカル画像のプレビューを実装しており、その効果は...

Linux での MySQL データベースのアンインストール

Linux で MySQL データベースをアンインストールするにはどうすればいいですか? 以下では、...

Uniapp WeChatアプレット: キー障害の解決策

ユニアプリコード <テンプレート> <表示> <image v-for...

Linux CentOS でスケジュールされたバックアップ タスクを設定する方法

実装準備 # ファイルパスをバックアップする必要があります: /opt/apollo/logs/ac...

vue3+ts+EsLint+Prettier 標準コード実装

目次使用EsLintの使用プロフィールを追加するPrettierの使用huskyとlint-stag...

Dockerレジストリイメージ同期の実装アイデア

はじめに以前は、Docker イメージは Azure のコンテナー レジストリに保存されていました。...

Eclipse は Tomcat を構成しますが、Tomcat には無効なポート解決策があります

目次1. EclipseがTomcatを構成する2. Tomcat の無効なポートの解決方法方法1:...

Selenium+testng を使用して Docker で Web 自動化を実現する方法

序文長い間さまざまな資料を読んで、ついに selenium+testng のパラメータ化の問題を解決...

MySQL ストアドプロシージャとストアドファンクションの詳細な説明

1 ストアドプロシージャ1.1 ストアドプロシージャとは何かストアド プロシージャは、特定の機能を実...

Linuxにソフトウェアをインストールするいくつかの方法の詳細な説明

1. RPM パッケージのインストール手順: 1. soft.version.rpm などの対応する...

Docker のタイムゾーンの問題とデータ移行の問題

最新のソリューション: -v /usr/share/zoneinfo/Asia/Shanghai:/...

Reactの原理の説明

目次1. setState() の説明1.1 データの更新1.2 推奨構文1.3 2番目のパラメータ...