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

推薦する

MySQLはデータベースのN+1クエリ問題を解決します

導入HibernateやMyBatisなどのORMフレームワークでは、部門に関連付けられたユーザーオ...

Nginx SSL証明書設定エラーの解決策

1. はじめにWeb プロジェクトを Linux サーバーで公開する場合、SSL 証明書を構成する必...

リンク内の href=# はどういう意味ですか?

現在のページへのリンク。 -------------------一般的な使用法は次のとおりです。 &...

JavaScript の Set データ構造の詳細な説明

目次1. セットとは何か2. セットコンストラクタ2.1) 配列2.2) 文字列2.3) 議論2.4...

Vueのシンプルな状態管理ストアモードを理解する方法

目次概要1. store.jsを定義する2. store.js を使用するコンポーネント3. 成果を...

Vue はウェブページの言語切り替えの国際化を実装します

1. 基本的な手順1: yarn add vue-i18nをインストールするこのパスに新しい .js...

jQueryはフォントサイズ調整ケースを実装します

この記事では、フォントサイズを調整するためのjQueryの具体的なコードを参考までに紹介します。具体...

MySQL8.0.18 複数マスターと 1 スレーブの構成

目次1. 現実的な背景2. 合意3. マスターを構成する3.1. 起動パラメータの設定3.2. パラ...

Linuxの貼り付けコマンドの使い方

01. コマンドの概要貼り付けコマンドは各ファイルを列ごとに結合します。これは、2 つの異なるファイ...

MySQLのさまざまなオブジェクトのサイズと長さの制限について話しましょう

目次識別子の長さ制限権限テーブルの範囲フィールドの長さ制限データベースとテーブルの数の制限テーブルサ...

ハイパーリンクに関するいくつかの質問

ポテトチップスパーティーのこのエピソードに参加して、何人かの友人に会えてとても嬉しいです。思いがけず...

docker ログ - docker コンテナ ログの実装を表示します

docker logs コマンドを使用してコンテナ ログを表示できます。コマンド形式: $ dock...

vue3 のコンポーネントの互換性のない変更の詳細な説明

目次機能コンポーネント非同期コンポーネントの書き方とdefineAsyncComponentメソッド...

MySQL マスタースレーブ構成の学習ノート

● 新しいプロジェクトのセキュリティを確保するためにクラウド データを購入する予定でした。 Alib...

WeChat アプレット開発フォーム検証 WxValidate の使用

個人的には、WeChat アプレットの開発フレームワークは VUE と概ね似ていると感じていますが、...