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

推薦する

Vue で echarts を使用してコンポーネントを視覚化する方法

echarts コンポーネントの公式ウェブサイト アドレス: https://echarts.apa...

Reactの3つの主要属性における状態の使用の詳細な説明

目次クラスコンポーネント機能コンポーネントsetStateの落とし穴React では多くの場所でデー...

CSS3 レーダースキャンマップのサンプルコード

CSS3 を使用して、クールなレーダースキャン画像を実現します。 コード上で直接: // インデック...

純粋なCSSでデジタルプラスとマイナスボタンを実装するための最適なソリューション

序文:デジタル加算ボタンと減算ボタンの実装には、次のような多くのソリューションがこれまでに使用されて...

CentOS に MySQL 5.5 をインストールするための完全な手順

目次1. インストール前の準備、インストールパッケージのダウンロード1 インストールの準備2 インス...

MySQL マスタースレーブレプリケーションの役割と動作原理の詳細な説明

1. マスタースレーブレプリケーションとは何ですか?マスタースレーブレプリケーションは、スレーブデー...

MySQLの最適化の詳細な分析とパフォーマンス

導入データベースを使用したことがある人なら、機能面での like 記号と = 記号の類似点と相違点を...

MySQLの暗黙的な変換について話す

作業の過程で、暗黙的な変換が発生するケースが数多くあります。暗黙的な変換は、クエリの速度低下を引き起...

収集する価値のあるCSS命名規則(ルール) よく使われるCSS命名規則

CSS命名規則(ルール) よく使われるCSS命名規則ヘッダー: ヘッダーコンテンツ: コンテンツ/コ...

MYSQL SERVER のログファイルを縮小する方法

トランザクション ログには、関連するデータベースに対する操作が記録され、データベースの回復に関連する...

Vue+Springbootでインターフェースシグネチャを実装するためのサンプルコード

1. 実装のアイデアインターフェース署名の目的は、リクエストパラメータが改ざんされていないか、リクエ...

HTML チュートリアル: よく使われる HTML タグのコレクション (4)

導入された HTML タグは、必ずしも XHTML 仕様に完全に準拠しているわけではありません。実際...

CSSプリコンパイル言語とその違いの詳細な説明

1. 何ですか マークアップ言語として、CSSは比較的シンプルな構文とユーザーに対する要件が低いが、...

...

MySQL スロークエリログの役割と公開

序文MySQL スロー クエリ ログは、MySQL が提供するログ レコードの一種です。これは、応答...