検索

ホームページ  >  に質問  >  本文

SHOW INDEX を ALTER TABLE に変換して MySQL にインデックスを追加する方法

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

リーリー

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

P粉731861241P粉731861241358日前493

全員に返信(2)返信します

  • P粉282627613

    P粉2826276132024-02-26 19:57:01

    上記のビルの良い回答をさらに詳しく説明しました。出力オプションが拡張され、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

    P粉2682849302024-02-26 12:51:38

    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
  • キャンセル返事