SHOW INDEX を ALTER TABLE に変換して MySQL にインデックスを追加する方法
P粉731861241
P粉731861241 2024-02-25 20:46:00
0
2
440

テーブルに対して SHOW INDEX を実行したところ、次のような出力が得られました:

リーリー

この情報に基づいて、テーブルにインデックスを追加するための ALTER ステートメントを作成するにはどうすればよいですか?

P粉731861241
P粉731861241

全員に返信(2)
P粉282627613

上記のビルの良い回答をさらに詳しく説明しました。出力オプションが拡張され、ADD PRIMARY KEY、ADD UNIQUE INDEX、または ADD INDEX

が含まれるようになりました。
select concat('ALTER TABLE ', table_schema, '.', table_name, ' ADD ',
  if(index_name = 'PRIMARY', 'PRIMARY KEY ', if(non_unique, 'INDEX ', 'UNIQUE INDEX ')),
  if (index_name = 'PRIMARY','', Index_name), ' (', group_concat('', column_name, '' order by seq_in_index), ');')
  「alter table ステートメント」として
information_schema.statistics より
ここで、テーブルスキーマ = ''
table_schema、table_name、index_name、non_unique ごとにグループ化します
table_schema、table_name、非一意の asc
で並べ替えます
いいねを押す +0
P粉268284930

SHOW INDEX 情報が不十分です。これを試してみてください:

select concat('ALTER TABLE `', table_schema, ``.`', table_name, '' ADD ',
  if(non_unique, '', 'UNIQUE '), 'INDEX `', インデックス名, '' (',
  group_concat('`', column_name, '`' order by seq_in_index), ');') as _ddl
information_schema.statistics より
ここで (テーブルスキーマ, テーブル名) = (?, ?)
table_schema、table_name、index_name、non_unique ごとにグループ化;

プレースホルダー ?、? を残したスキーマ名とテーブル名を入力する必要があります。

これは単なる入門編です。プレフィックスインデックス、式インデックス、アノテーションなどの一部のオプションが考慮されていないことはわかっています。読者の演習として残しておきます。

また、インデックスごとに個別の alter table ステートメントも生成されます。すべてのインデックスを追加する変更テーブルを作成する場合は、サブクエリを使用して各インデックスの列リストを生成し、group_concat() でそれらを外側のクエリで結合します。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート